chapter 3
1.python语句中一些基本规则和特殊字符:
井号#表示之后的字符为python注释
换行\n是标准的行分隔符
反斜线\是继续上一行
分号;将两个语句连接在一行中
冒号:将代码块的头和体分开
语句用缩进的块的方式体现
不同的缩进深度分隔不同的代码块
python文件以模块的形式组织
2.python语句一般使用换行分隔,即一行一个语句,一行过长的语句可以使用反斜杠\分解成几行;
在使用闭合操作符如小括号、大括号、花括号时可以多行书写,另外三引号包括下的字符串也可以跨行书写
3.尽量使用四个空格为缩进宽度,避免使用制表符
4.分号允许将多个语句写在同一行上,但不提倡这样做
5.复制并不是直接讲一个值赋给一个变量,对象通过引用传递。在赋值时,不管这个对象是新创建的还是已存在的,都是将该对象的引用(并不是值)赋值给变量。
6.python的赋值语句不会有返回值:x=1;y=(x=x+1)在python中是非法的
可以链式赋值 y=x=x+1
7.多元赋值:将多个变量同时赋值的方法,采用这种方式赋值时,等号两边的对象都是元组
(x,y,z)=(1,2,'a string') 小括号是可选的
利用多元赋值的方式可以实现无需中间变量交换两个变量的值
x,y=1,2 ;x,y=y,x
8.python用下划线作为变量前缀和后缀指定特殊变量:
_xxx :不用'from module import *' 导入
__xxx__ :系统定义名字
__xxx :类中的私有变量名
9.python提供了可以通过__doc__特别变量,动态获得文档字串的机制,在模块、类声明、或者函数声明中第一个没有复制的字符串可以用属性obj.__doc__来进行访问:类的文档变量是class.__doc__、函数的文档变量是function.__doc__
10.模块结构和布局:
#(1)起始行
#(2)模块文档
#(3)模块导入
#(4)变量定义
#(5)类定义
#(6)函数定义
#(7)主程序
11.__name__系统变量 可以指示模块是如何被加载的。如果模块是被导入,__name__的值为模块名字,如果模块是被直接执行,__name__的值为'__main__'
12.变量只有被创建和赋值后才能被使用
13.引用计数:
python内部记录着所有使用中的对象各有多少引用。一个内部跟踪变量,称为一个引用计数器,当这个对象的引用计数变为0时,它被垃圾回收(严格来说并不是)。
增加引用计数:当对象被创建并(将其引用)赋值给变量时,该对象的引用计数就被设置为1。当同一个对象(的引用)又被赋值给其他变量时,或作为参数传递给函数,方法或类实例时,或者被赋值为一个窗口对象的成员时,该对象的一个新的引用,或者称作别名,就被创建(则该对象的引用计数自动+1)
例:x=3.14 #创建了一个浮点数对象 并将其引用赋值给x,x是第一个引用
y=x #创建了一个指向同一对象的别名y,事实上并没有创建新的对象,而是将该对象的引用次数增加了1次
对象被创建:x=3.14
另外的别名被创建: y=x
作为参数传递给函数: foobar(x)
成为容器对象的一个元素: mylist = [123,x,'xyz']
以上都会使得引用计数+1
减少引用计数:当对象的引用被销毁时,引用计数会减小,例如当引用离开其作用范围时,这种情况最经常出现在函数运行结束时,所有的局部变量被自动销毁,对象的引用计数也就随之减少。
例:foo = 'xyz' #字符串对象xyz被创建,引用计数为1
bar = foo #增加一个别名bar,引用计数+1为2
foo = 123 #foo被重新赋值给整数对象,xyz对象的引用计数自动减1为1
一个本地引用离开了其作用范围。比如foobar()函数结束时
对象的别名被显式的销毁:del y #or del x
对象的一个别名被赋值给其他对象: x = 123
对象被从一个窗口对象中移除: mylist.remove(x)
窗口对象本身被销毁:del mylist
以上会使得引用计数-1
14.del语句:会产出对象的一个引用 语法:del obj1[,obj2[....objN]]
15.不再被使用的内存会被一种称为垃圾收集的机制释放。垃圾收集器是一块独立的代码,它用来寻找引用计数为0的对象,也负责检查那些虽然引用计数大于0但也应该被销毁的对象。
python的垃圾收集器其实是一个引用计数器和一个循环垃圾收集器。
16.关键字as:
as 定义异常实例 except IOError as e : 在老版本中写成except IOError,e :