井号(#)表示之后的字符为Python注释
反斜线 (\ ) 继续上一行
分号 (; )将两个语句连接在一行中
冒号 (: ) 将代码块的头和体分开
C语言赋值语句,被当成一个表达式(可以返回值)。
Python的赋值语句不会返回值。
>>>x = 1
>>>y = (x = x + 1)
#assignments not expressions! File "<stdin>", line 1
y= (x = x + 1)
^
SyntaxError:invalid syntax
链式赋值没问题,看(本章稍后部分会给出更多的例子):
>>>y = x = x + 1
>>>x, y
(2,2)
增量赋值
x= x + 1可以被写成:x+= 1
增量赋值相对普通赋值不仅仅是写法上的改变,最有意义的变化是第一个对象(我们例子
中的 A)仅被处理一次。可变对象会被就地修改(无修拷贝引用),不可变对象则和A= A +B 的结果一样(分配一个新对象)
>>>m = 12
>>>m %= 7
>>>m
5
>>>m **= 2
>>>m
25
>>>aList = [123, 'xyz']
>>>aList += [45.6e7]
>>>aList
[123,'xyz', 456000000.0]
多重赋值
>>>x = y = z = 1
>>>x
1
>>>y
1
>>>z
1
在上面的例子中,一个值为1的整数对象被创建,该对象的同一个引用被赋值给x、y和
z。也就是将一个对象赋给了多个变量。当然,在Python当中,将多个对象赋给多个变量也是
可以的。
“多元”赋值
用这种方式赋值时,等号两边的对象都是元组
>>>x, y, z = 1, 2, 'a string'
>>>x
1
>>>y
2
>>>z
'astring'
相当于:
>>>(x, y, z) = (1, 2, 'a string')
/*C语言中两个变量交换*/
tmp= x;
x= y;
y= tmp;
/*python中两个变量交换*/
>>>x, y = 1, 2
>>>x
1
>>>y
2
>>>x, y = y, x
>>>x
2
>>>y
1
显然,Python在赋值之前已经事先对x和y的新值做了计算。
合法的Python标识符
Python标识符字符串规则和其他大部分用C编写的高级语言相似:
第一个字符必须是字母或下划线(_)
剩下的字符可以是字母和数字或下划线
大小写敏感
标识符不能以数字开头;除了下划线,其他的符号都不允许使用。处理下划线最简单的方法是把它们当成字母字符。
大小写敏感意味着标识符 foo不同于 Foo,而这两者也不同于FOO。
专用下划线标识符
_xxx不用'frommodule import *'导入
__xxx__系统定义名字
__xxx类中的私有变量名
下面就是一种非常合理的布局:
#(1)起始行(Unix)
#(2)模块文档
#(3)模块导入
#(4)变量定义
#(5)类定义
#(6)函数定义
#(7)主程序
当对象被创建并(将其引用)赋值给变量时,该对象的引用计数就被设置为1。
当同一个对象(的引用)又被赋值给其它变量时,或作为参数传递给函数,方法或类实例
时,或者被赋值为一个窗口对象的成员时,该对象的一个新的引用,或者称作别名,就被创建
(则该对象的引用计数自动加1)。
请看以下声明:
x= 3.14
y= x
语句x=3.14创建了一个浮点数对象并将其引用赋值给x。x是第一个引用,因此,该对象的引用计数被设置为1。语句y=x创建了一个指向同一对象的别名y。事实上并没有为Y创建一个新对象,而是该对象的引用计数增加了1次(变成了2)。这是对象引用计数增加的方式之一。还有一些其它的方式也能增加对象的引用计数,比如该对象作为参
数被函数调用或这个对象被加入到某个容器对象当中时。
对象的引用计数在
1、对象被创建
x= 3.14
2、或另外的别名被创建
y= x
3、或被作为参数传递给函数(新的本地引用)
foobar(x)
4、或成为容器对象的一个元素
myList= [123, x, 'xyz']
引用计数在以下情况会减少:一个本地引用离开了其作用范围。
1、比如foobar()(参见上一下例子)函数结束时。
2、对象的别名被显式的销毁。
dely # or del x
3、对象的一个别名被赋值给其它的对象
x= 123
4、对象被从一个窗口对象中移除
myList.remove(x)
5、窗口对象本身被销毁
delmyList # or goes out-of-scope
对Unix平台,是'\n',对DOS或win32平台,则是'\r\n'。
通过使用os.lineseq,我们不必关心程序运行在什么平台,也不必要根据不同的平台决定使用哪种行结束符。
ls=os.lineseq
all.append(entry) # write lines to file with proper line-ending
fobj= open(fname, 'w')
fobj.writelines(['%s%s'% (x, ls) for x in all])