12.25 python学习——菜鸟编程

程序猿是一种非常特殊的、可以从事程序开发、维护的动物。一般分为程序设计猿和程序编码猿,但两者的界限并不非常清楚,都可以进行开发、维护工作。^_^!

12.25 python学习——菜鸟编程_第1张图片

 啥也不是,python都不会,先学会再说!先学点专业术语(行业黑话)菜鸟教程 - 学的不仅是技术,更是梦想!

1.基础常识

#!/usr/bin/env python3 会去环境设置寻找 python3 目录,指定解释器路径,这里说的解释器指的是python。

#!/usr/bin/python3

print("Hello, World!")

Python 3.0 版本,常被称为 Python 3000,或简称 Py3k。

环境变量配置

程序所在的目录可能不在默认搜索路径中,path(路径)储存在环境变量中。

Unix 或 Windows 中路径变量为 PATH(UNIX 区分大小写,Windows 不区分大小写)。

export PATH="$PATH:/usr/local/bin/python" 

以下为 Python 命令行参数:

选项 描述
-d 在解析时显示调试信息
-O 生成优化代码 ( .pyo 文件 )
-S 启动时不引入查找Python路径的位置
-V 输出Python版本号
-X 从 1.6版本之后基于内建的异常(仅仅用于字符串)已过时。
-c cmd 执行 Python 脚本,并将运行结果作为 cmd 字符串。
file 在给定的python文件执行python脚本。

2.基础语法

标识符:字母或_开头,字母数字_组成,区分大小写

关键字(保留字、keyword):不能把它们用作任何标识符名称,例如None、True

注释:# 多行注释可以用多个 # 号,还有 ''' 和 """

# 第一个注释
# 第二个注释
 
'''
第三注释
第四注释
'''
 
"""
第五注释
第六注释
"""

缩进:python用缩进代表代码块,c用{}

多行语句作为一个整体:分行写每行行末用\;在 [], {}, 或 () 中的多行语句,不需要使用反斜杠 \;把多行语句写在一行,用分号隔开就行。

Python 中单引号 ' 和双引号 " 使用完全相同。

字符串连接:可以用 + 运算符连接在一起, * 2表示重复2次。

字符串索引:从左往右以 0 开始,从右往左以 -1 开始。

字符串的截取:变量[头下标:尾下标:步长]

str='123456789'
 
print(str)                 # 输出字符串
print(str[0:-1])           # 从左到右索引,输出第一个到倒数第一个的所有字符
print(str[-1:0])           # 从右到左索引,输出倒数第一个到第一个的所有字符
print(str[0])              # 输出字符串第一个字符
print(str[2:5])            # 输出从第三个开始到第六个的字符(不包含)
print(str[2:])             # 输出从第三个开始后的所有字符
print(str[1:5:2])          # 输出从第二个开始到第五个且每隔一个的字符(步长为2)
print(str * 2)             # 输出字符串两次
print(str + '你好')         # 连接字符串

r 指 raw,即 raw string,会自动将反斜杠转义,r"\n"就是\n不代表换行的意思

空行:分隔新代码段或者类

输出显示在一行:加上end=" "

print( x, end=" " )
print( y, end=" " )
print()

关于import小结:

在 python 用 import 或者 from...import 来导入相应的模块。

将整个模块(somemodule)导入,格式为: import somemodule

从某个模块中导入某个函数,格式为: from somemodule import somefunction

从某个模块中导入多个函数,格式为: from somemodule import firstfunc, secondfunc, thirdfunc

将某个模块中的全部函数导入,格式为: from somemodule import *

将模块换个别名,例如:import somemodule as abc

help() 函数

调用 python 的 help() 函数可以打印输出一个函数的文档字符串:

# 如下实例,查看 max 内置函数的参数列表和规范的文档
>>> help(max)
……显示帮助信息……

按下 : q 两个按键即退出说明文档

在终端中进入python环境用python命令,退出用quit()

3.数据类型、变量赋值

标准数据类型

  • 不可变数据(3 个):Number(数字)、String(字符串)、tup  tuple(元组);
  • 可变数据(3 个):List(列表)有序【】、dict  Dictionary(字典)无序键值对映射、Set(集合)无序 {} 。
  • 在 Python2 中是没有布尔型bool的,它用数字 0 表示 False,用 1 表示 True。
  • 在 Python 中,所有非零的数字和非空的字符串、列表、元组等数据类型都被视为 True,只有 0、空字符串、空列表、空元组等被视为 False。
  • 在 Python 中,集合使用大括号 {} 表示,元素之间用逗号 , 分隔。

    另外,也可以使用 set() 函数创建集合。

    注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。

  • int(x,base) 
  • 若 x 为纯数字,则不能有 base 参数,否则报错;其作用为对入参 x 取整若 x 为 str,则 base 可略可有。

    base 存在时,视 x 为 base 类型数字,并将其转换为 10 进制数字。

    若 x 不符合 base 规则,则报错。

  • >>>int("1001",2)
    9
    # "1001"才是2进制格式,并转化为十进制数字9
  • 字典当中的元素是通过键(key) : 值(value) 的集合来存取的,而列表通过偏移存取。字典的每个键值 key:value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中 ,格式如下所示:d = {key1 : value1, key2 : value2 }

  • 4 dict.get(key, default=None)
    返回指定键的值,如果值不在字典中返回default值
  • 注意:dict 作为 Python 的关键字和内置函数,变量名不建议命名为 dict

    #!/usr/bin/python3
    
    dict = {}
    dict['one'] = "1 - 菜鸟教程"
    dict[2]     = "2 - 菜鸟工具"
    
    tinydict = {'name': 'runoob','code':1, 'site': 'www.runoob.com'}
    
    
    print (dict['one'])       # 输出键为 'one' 的值
    print (dict[2])           # 输出键为 2 的值
    print (tinydict)          # 输出完整的字典
    print (tinydict.keys())   # 输出所有键
    print (tinydict.values()) # 输出所有值
    
    输出结果
    1 - 菜鸟教程
    2 - 菜鸟工具
    {'name': 'runoob', 'code': 1, 'site': 'www.runoob.com'}
    dict_keys(['name', 'code', 'site'])
    dict_values(['runoob', 1, 'www.runoob.com'])
    

增加列表元素  list.append('Google') ## 使用 append() 添加元素

删除列表元素 del list1[2]   #删除列表list1中的第二个元素

创建、删除变量

对变量赋值就等同于声明和创建了这个变量,多变量赋值用逗号隔开。删除用del

给变量赋值,或者说让变量指向这个对象。

counter = 100

a, b, c = 1, 2, "runoob"

一个变量可以通过赋值指向不同类型的对象。意思是a = 1, a = "hello" a这个变量指向了int和str

与 C 字符串不同的是,Python 字符串不能被改变。向一个索引位置赋值,比如  word = 'Python'  word[0] = 'm' 会导致错误。

查询变量所指的对象类型

isinstance 和 type 的区别在于:

  • type()输出数据类型,不会认为子类是一种父类类型。
  • isinstance()判断是否为某种类型,会认为子类是一种父类类型。
>>> a, b, c, d = 20, 5.5, True, 4+3j
>>> print(type(a), type(b), type(c), type(d))
   

>>> a = 111
>>> isinstance(a, int)
True
>>>

数值运算

/    //   %   **

除  整除 取余  乘方

在混合计算时,Python会把整型转换成为浮点数。浮点数float就是小数的意思。complex复数,可以用 a + bj,或者 complex(a,b) 表示。

\:Python 使用反斜杠 \ 转义特殊字符,如果你不想让反斜杠发生转义,可以在字符串前面添加一个 r

>>> print('Ru\noob')
Ru
oob
>>> print(r'Ru\noob')
Ru\noob
>>>

 Python随机数函数

函数 描述
choice(seq) 从序列的元素中随机挑选一个元素,比如random.choice(range(10)),从0到9中随机挑选一个整数。
randrange ([start,] stop [,step])  从指定范围[start,] stop内,按指定基数递增的集合中获取一个随机数,递增基数step默认值为 1
random()  随机生成下一个实数,它在[0,1)范围内。
seed([x])  改变随机数生成器的种子seed。如果你不了解其原理,你不必特别去设定seed,Python会帮你选择seed。
shuffle(lst)  将序列的所有元素随机排序
uniform(x, y) 随机生成下一个实数,它在[x,y]范围内。

 4.Python 函数

函数定义

结束函数,将一个值暂时储存或者说返回一个值。不带return相当于返回 None。

调用printme()函数,必须传入一个参数,

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
# 定义函数  
def printme( str ):      #def 函数名(参数)
   "打印任何传入的字符串"
   print str
   return
 
# 调用函数
printme("我要调用用户自定义函数!")
printme("再次调用同一函数")



 全局变量和局部变量

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
total = 0 # 这是一个全局变量
# 可写函数说明
def sum( arg1, arg2 ):
   #返回2个参数的和."
   total = arg1 + arg2 # total在这里是局部变量.
   print "函数内是局部变量 : ", total
   return total
 
#调用sum函数
sum( 10, 20 )
print "函数外是全局变量 : ", total

5.Python 语句

条件

if...else... 多条件用if...elif...else...或用and、or连接条件,优先级><先判断大小再判断and、or

num = 5     
if num == 3:            # 判断num的值
    print 'boss'   
elif num == 2:
    print 'user'
else:
    print 'roadman'     # 条件均不成立时输出


num = 9
if num >= 0 and num <= 10:    # 判断值是否在0~10之间
    print 'hello'

 循环

Python 提供了 for 循环和 while 循环(在 Python 中没有 do..while 循环):

控制语句 描述
break 语句 在语句块执行过程中终止循环,并且跳出整个循环 break单独成行即可
continue 语句 在语句块执行过程中终止当前循环,跳出该次循环,执行下一次循环。
pass 语句 pass是空语句,是为了保持程序结构的完整性。

 while 循环:条件为真就继续

判断条件可以是任何表达式,任何非零、或非空(null)的值均为true。

当判断条件假 false 时,循环结束。

如果条件判断语句永远为 true,无限循环,可以使用 CTRL+C 来中断循环。

pass 占据一个位置,因为如果定义一个空函数程序会报错,当你没有想好函数的内容是可以用 pass 填充,使程序可以正常运行。

Python 推导式是一种独特的数据处理方式,可以从一个数据序列构建另一个新的数据序列的结构体。

[表达式 for 变量 in 列表] 
[out_exp_res for out_exp in input_list]

或者 

[表达式 for 变量 in 列表 if 条件]
[out_exp_res for out_exp in input_list if condition]

表达式指的是命令的意思,看数据处理的目的

6.Python 面向对象

  • 第一种方法__init__()方法是一种特殊的方法,被称为类的构造函数或初始化方法,当创建了这个类的实例时就会调用该方法

  • self 代表类的实例,self 在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数,默认用self,也可以用别的不是关键字的词表示。self 代表的是类的实例,代表当前对象的地址,而 self.__class__ 则指向类,有点像目录。

  • 当你创建一个对象并给它赋一个变量的时候,变量名只是指向计算机中存储那个对象的内存。

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
class Employee:     # 创建一个类
    
    empCount = 0  '''empCount 变量是一个类变量,它的值将在这个类的所有实例之间共享。你可以在内部类或外部类使用 Employee.empCount 访问。'''
    
    def _init_(self, name, salary):   #构造函数/初始化
      self.name = name
      self.salary = salary
      Employee.empCount += 1    
   
   def displayCount(self):
     print "Total Employee %d" % Employee.empCount
 
   def displayEmployee(self):
      print "Name : ", self.name,  ", Salary: ", self.salary  #输出的是self.name,上面写的把name的值赋值给self.name,
 
"创建 Employee 类的第一个对象"
emp1 = Employee("Zara", 2000)
"创建 Employee 类的第二个对象"
emp2 = Employee("Manni", 5000)
emp1.displayEmployee()
emp2.displayEmployee()
print "Total Employee %d" % Employee.empCount

输出
Name :  Zara ,Salary:  2000    
Name :  Manni ,Salary:  5000
Total Employee 2

    
class Test:
    def prt(self):
        print(self)
        print(self.__class__)
 
t = Test()
t.prt()

结果
<__main__.Test instance at 0x10d066878>
__main__.Test

attribute 属性缩写attr:has、get、set、del

hasattr(emp1, 'age')    # 判断是否存在这个属性,如果存在 'age' 属性返回 True。
getattr(emp1, 'age')    # 返回 'age' 属性的值
setattr(emp1, 'age', 8) # 添加属性 'age' 值为 8
delattr(emp1, 'age')    # 删除属性 'age'
#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
class Employee:
   '所有员工的基类'
   empCount = 0
 
   def __init__(self, name, salary):
      self.name = name
      self.salary = salary
      Employee.empCount += 1
   
   def displayCount(self):
     print "Total Employee %d" % Employee.empCount
 
   def displayEmployee(self):
      print "Name : ", self.name,  ", Salary: ", self.salary
 
"创建 Employee 类的第一个对象"
emp1 = Employee("Zara", 2000)
"创建 Employee 类的第二个对象"
emp2 = Employee("Manni", 5000)
emp1.displayEmployee()
emp2.displayEmployee()
print "Total Employee %d" % Employee.empCount

类的继承

代码的重用,实现这种重用的方法之一是通过继承机制

通过继承创建的新类称为子类派生类,被继承的类称为基类父类超类

继承语法

class 派生类名(基类名)

可以使用issubclass()或者isinstance()方法来检测。

  • issubclass() - 布尔函数判断一个类是另一个类的子类或者子孙类,语法:issubclass(sub,sup)
  • isinstance(obj, Class) 布尔函数如果obj是Class类的实例对象或者是一个Class子类的实例对象则返回true。
__cmp__ ( self, x )
对象比较
简单的调用方法 : cmp(obj, x)
AttributeError: JustCounter instance has no attribute '__secretCount'
# 报错,实例不能访问私有变量

Python不允许实例化的类访问私有数据,但你可以使用 object._className__attrName( 对象名._类名__私有属性名 )访问属性,参考以下实例:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

class Runoob:
    __site = "www.runoob.com"  # 双下划线是私有变量,不能直接访问

runoob = Runoob()
print runoob._Runoob__site  # 直接输出__site会报错  格式object._className__attrName( 对象名._类名__私有属性名 )

输出www.runoob.com

单下划线、双下划线、头尾双下划线说明:

  • __foo__: 定义的是特殊方法,一般是系统定义名字 ,类似 __init__() 之类的。

  • _foo: 以单下划线开头的表示的是 protected 类型的变量,即保护类型只能允许其本身与子类进行访问,不能用于 from module import *

  • __foo: 双下划线的表示的是私有类型(private)的变量, 只能是允许这个类本身进行访问了。

12.25 python学习——菜鸟编程_第2张图片

你可能感兴趣的:(学习)