换行
Python 语句,一般使用换行分隔,也就是说一行一个语句。一行过长的语句可以使用反斜杠( \ ) 分解成几行。
有两种例外情况一个语句不使用反斜线也可以跨行。在使用闭合操作符时,单一语句可以跨多行,例如:在含有小括号、中括号、花括号时可以多行书写。另外就是三引号包括下的字符串也可以跨行书写。
如果要在使用反斜线换行和使用括号元素换行作一个选择,我们推荐使用括号,这样可读性会更好。
缩进
核心风格:缩进四个空格宽度,避免使用制表符对一个初次使用空白字符作为代码块分界的人来说,遇到的第一个问题是:缩进多大宽度才合适?两个太少,六到八个又太多,因此我们推荐使用四个空格宽度。需要说明一点,不同的文本编辑器中制表符代表的空白宽度不一,如果你的代码要跨平台应用,或者会被不同的编辑器读写,建议你不要使用制表符。使用空格或制表符这两种风格都得到了Python 创始人Guidovan Rossum 的支持,并被收录到Python 代码风格指南文档。
变量赋值
注意,赋值并不是直接将一个值赋给一个变量, 尽管你可能根据其它语言编程经验认为应该如此。在Python 语言中,对象是通过引用传递的。在赋值时,不管这个对象是新创建的,还是一个已经存在的,都是将该对象的引用(并不是值)赋值给变量。你比较熟悉C, 你会知道赋值语句其实是被当成一个表达式(可以返回值)。
不过这条并不适合于 Python, Python 的赋值语句不会返回值。类似下面的语句在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
增量赋值
增量赋值相对普通赋值不仅仅是写法上的改变,最有意义的变化是第一个对象(我们例子中的A)仅被处理一次。可变对象会被就地修改(无修拷贝引用), 不可变对象则和 A = A +B 的结果一样(分配一个新对象),我们前面提到过,有一个例外就是 A 仅被求值一次。
多重赋值
>>> x = y = z = 1
>>> x
1
>>> y
1
>>> z
1
在上面的例子中,一个值为1 的整数对象被创建,该对象的同一个引用被赋值给 x、y 和z 。也就是将一个对象赋给了多个变量。当然,在Python 当中,将多个对象赋给多个变量也是可以的。
多元”赋值
另一种将多个变量同时赋值的方法我们称为多元赋值(multuple)。这不是官方Python 术语, 而是我们将 "mul-tuple"连在一起自造的。因为采用这种方式赋值时, 等号两边的对象都是元组(我们在2.8 节讲过元组是一种Python 基本数据类型)。
>>> x, y, z = 1, 2, 'a string'
>>> x
1
>>> y
2
>>> z
'a string'
在上面的例子里, 两个整数对象(值分别为1 和2)及一个字符串对象, 被分别赋值给x, y 和z。通常元组需要用圆括号(小括号)括起来,尽管它们是可选的。我们建议总是加上圆括号以使得你的代码有更高的可读性。
>>> (x, y, z) = (1, 2, 'a string')
在其它类似C 的语言中, 如果你要交换两个值, 你会想到使用一个临时变量比如tmp 来临时保存其中一个值:
/* C 语言中两个变量交换 */
tmp = x;
x = y;
y = tmp;
在上面的C 代码片段中,变量x 和变量y 的值被互相交换。 临时变量tmp 用于在将y 赋值给x 前先保存x 的值。将y 的值赋给x 后, 才可以将保存在tmp 变量中的x 的值赋给y。Python 的多元赋值方式可以实现无需中间变量交换两个变量的值。
# swapping variables in Python
>>> x, y = 1, 2
>>> x
1
>>> y
2
>>> x, y = y, x
>>> x
2
>>> y
1
显然, Python 在赋值之前已经事先对x 和y 的新值做了计算。