你编写的大多数语句(逻辑行)都将包含_表达式_。一个表达式的简单例子是2+3。一个表达式可分解成操作符和操作对象。
操作符_的功能是做一些事,通过符号(如+)或特定的关键字表示。操作符需要一些数据来操作,这些数据被你作_操作对象。在这个例子中2和3是操作对象。
我们将简单地看一下操作符和它的用法:
注意,您可以使用交互式解释器计算例子中给出的表达式。例如,为了测试表达式2 + 3,使用交互式Python解释器提示符:
>>> 2 + 3
5
>>> 3 * 5
15
>>>
以下是一些操作符的简介:
+ (加号)
3 + 5 得 8, 'a' + 'b' 得 'ab'。- (减号)
-5.2 得到一个负数,50 - 24 得 26.* (乘法)
2 * 3 得 6. 'la' * 3 得到 'lalala'.** (幂)
3 ** 4 得 81 (也就是3 * 3 * 3 * 3)/ (除法)
13 / 3 得4.3333333333333333.// (整除)
13 // 3 得 4-13 // 3 得 -5% (取模)
13 % 3 得 1. -25.5 % 2.25 得 1.5.<< (向左移位)
2 << 2 得 8. 2 用二进制表示为10。1000,它表示数字8。>> (向右移位)
11 >> 1 得 5.11 用二进制表示为1011,向右移动1位后得到二进制101,表示数字5。& (按位与)
5 & 3得 1。| (按位或)
5 | 3得 7。^ (按位异或)
5 ^ 3 得 6。~ (按位求反)
~5 得 -6。详见 http://stackoverflow.com/a/11810203< (小于)
True或False。注意这些名字的大小写。5 < 3 返回 False 而 3 < 5 返回 True.3 < 5 < 7 返回 True.> (大于)
5 > 3 返回 True。如果操作对象都是数字,它们首先转换为普通型,否则,将返回False。<= (小于等于)
x = 3; y = 6; x <= y 返回 True.>= (大于等于)
x = 4; y = 3; x >= y 返回 True。== (等于)
x = 2; y = 2; x == y 返回 True.x = 'str'; y = 'stR'; x == y 返回 False.x = 'str'; y = 'str'; x == y 返回 True.!= (不等于)
x = 2; y = 3; x != y 返回 True.not (逻辑非)
True,它返回 False。如果 x 是 False,它返回 True。x = True; not x 返回 False.and (逻辑与)
False, x and y 返回 False,否则它返回y的值。x = False; y = True; x and y 返回 False,因为 x 为假。在这种情况下,Python将不计算y,因为它知道and左边表达式是 False ,这意味着整个表达式将为 False ,而不论其它值为什么。这叫做求值捷径。or (逻辑或)
True, 它返回真,否则它返回y的值。x = True; y = False; x or y 返回 True。求值捷径这也适用。我们经常会对一个变量进行数学操作,然后将操作的结果返回给最初的变量。这些表达式有一个快捷方式:
a = 2
a = a * 3
可以写成:
a = 2
a *= 3
注意:将 var = var operation expression 写成 var operation= expression。
如果你有一个表达式如 2 + 3 * 4, 是先做加法还是先做乘法呢?我们的高中数学告诉我们,应该先做乘法。这意味着乘法操作符比加法操作符具有更高的优先级。
下面的表给出了Python运算顺序的优先表,从最低(最小约束力)到最高(最高约束力)。 意思是说,在给定的表达式中,Python将按照自下而上的顺序,首先计算优先表下方的表达式。
下面的表取自Python参考手册,是为了提供完整性。为了显式地指定优先级,更好的做法是使用圆括号组织运算符和操作对象。这可使程序更加可读。详见下面更改运算顺序。
lambda : Lambda表达式if - else : 条件表达式or : 逻辑或and : 逻辑与not x : 逻辑非in, not in, is, is not, <, <=, >, >=, !=, == : 比较、成员检测、相等检测| : 按位或^ : 按位异或& : 按位与<<, >> : 移位+, - : 加和减*, /, //, % : 乘法,除法,浮点除和余数+x, -x, ~x : 正,负,按位非** : 乘方x[index], x[index:index], x(arguments...), x.attribute : 索引,切片,函数调用,属性引用(expressions...), [expressions...], {key: value...}, {expressions...} : 显示 Binding 或元组,显示列表, 显示字典我们没有遇到的操作符将在后面的章节解释。
上表中在同一行列出的操作符具有_相同优先级_。例如,+和-具有相同的优先级。
为使表达式更具可读性,我们可以使用圆括号。例如2 + (3 * 4) 肯定比需要知道操作符运算优先级的 2 + 3 * 4 更容易理解。与其他方面一样,应该合理使用括号不应该冗余(不要过分使用),如(2 + (3 * 4))。
使用括号有一个额外的优势——它帮助我们更改运算顺序。例如,如果您想要在一个表达式中加法在乘法之前运算,那么你可以这样写 (2 + 3) * 4。
操作符通常从左到右。这意味着具有相同优先级的操作符从左到右的方式计算。例如2 + 3 + 4计算为 (2 + 3) + 4。
例子 (保存为expression.py):
length = 5
breadth = 2
area = length * breadth
print('Area is', area)
print('Perimeter is', 2 * (length + breadth))
输出:
D:> python expression.py
Area is 10
Perimeter is 14
它是如何工作的
矩形的长度和宽度以同样的名字存储在变量中,在表达式的帮助下,我们使用这些计算矩形的面积和周长。我们存储表达式length * breadth 的结果在变量area中,然后使用print函数打印它。在第二种情况下,在打印函数中我们直接使用表达式2 * (length + breadth)的值。
同样要注意,Python_完美打印_是如何输出的。即使我们没有在'Area is' 和变量area,之间指定一个空间,Python为我们得到一个干净漂亮的输出,而且这种方式使用程序的可读性更强(因为我们不需要担心为输入我们在字符串中间使用的空格)。这只是让Python程序员的生活更轻松的一个例子。
我们已经看到了如何使用操作符,操作对象和表达式——这是任何程序的基石。接下来,我们将看到在使用语句的程序中如何利用这些。