你编写的大多数语句(逻辑行)都将包含_表达式_。一个表达式的简单例子是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程序员的生活更轻松的一个例子。
我们已经看到了如何使用操作符,操作对象和表达式——这是任何程序的基石。接下来,我们将看到在使用语句的程序中如何利用这些。