以下是可用运算符的快速概述:
-
+
(加)- 添加两个对象
3 + 5
输出8
。'a' + 'b'
输出'ab'
。
-
-
(减去)- 给另一个数字减去一个数字; 如果第一个操作数不存在则假定为零。
50 - 24
输出26
。
-
*
(乘)- 给出两个数字的乘法或返回多次重复的字符串。
2 * 3
输出6
。'la' * 3
输出'lalala'
。
-
**
(功率)- 将x返回到y的幂
3 ** 4
输出81
(即3 * 3 * 3 * 3
)
-
/
(划分)- 将x除以y
13 / 3
输出4.333333333333333
-
//
(分和楼)- 将x除以y并将答案向下舍入到最接近的整数值。请注意,如果其中一个值是浮点数,您将返回浮点数。
13 // 3
输出4
-13 // 3
输出-5
9//1.81
输出4.0
-
%
(模)- 返回除法的余数
13 % 3
输出1
。-25.5 % 2.25
输出1.5
。
-
<<
(左移)- 将数字位向左移动指定的位数。(每个数字在内存中用位或二进制数字表示,即0和1)
2 << 2
输出8
。2
由10
位表示。- 左移2位
1000
表示小数8
。
-
>>
(右移)- 将数字的位向右移动指定的位数。
11 >> 1
输出5
。11
以位表示1011
,当右移1位时给出101
小数5
。
-
&
(按位和)- 比特和数字
5 & 3
输出1
。
-
|
(按位或)- 数字的按位OR
5 | 3
输出7
-
^
(按位异或)- 数字的按位异或
5 ^ 3
输出6
-
~
(逐位反转)- x的逐位反转是 - (x + 1)
~5
输出-6
。有关详细信息,请访问http://stackoverflow.com/a/11810203
-
<
(小于)- 返回x是否小于y。所有比较运算符返回
True
或False
。请注意这些名称的大小写。 5 < 3
给予False
和3 < 5
输出True
。- 比较可以任意链接:
3 < 5 < 7
输出True
。
- 返回x是否小于y。所有比较运算符返回
-
>
(大于)- 返回x是否大于y
5 > 3
输出True
。如果两个操作数都是数字,则首先将它们转换为通用类型。否则,它总是返回False
。
-
<=
(小于等于)- 返回x是否小于等于y
x = 3; y = 6; x <= y
输出True
-
>=
(大于等于)- 返回x是否大于或等于y
x = 4; y = 3; x >= 3
输出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
(布尔NOT 相当于java中的 ! 符号)- 如果是
True
,则返回False
。如果是False
,则返回True
。 x = True; not x
回报False
。
- 如果是
-
and
(布尔AND 相当于java中的 && 符号)x = False; y = True; x and y
返回,False
因为x为False。在这种情况下,Python不会评估y,因为它知道'和'表达式的左侧是False
暗示整个表达式False
与其他值无关。这称为短路评估。- 两个值都为True才返回True,有一个False则返回False
-
or
(布尔OR 相当于java中的 || 符号)x = True; y = False; x or y
回报True
。短路评估也适用于此。- 有一个为True则返回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
:布尔ORand
:布尔ANDnot x
:布尔NOTin, not in, is, is not, <, <=, >, >=, !=, ==
:比较,包括成员资格测试和身份测试|
:按位OR^
:按位异或&
:按位AND<<, >>
: 位移+, -
: 加减*, /, //, %
:乘法,除法,分区和取模+x, -x, ~x
:正,负,按位NOT**
:指数x[index], x[index:index], x(arguments...), x.attribute
:订阅,切片,调用,属性引用(expressions...), [expressions...], {key: value...}, {expressions...}
:绑定或元组显示,列表显示,字典显示,设置显示
改变评估顺序
为了使表达式更具可读性,我们可以使用括号。例如,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))
输出:
$ python expression.py
Area is 10
Perimeter is 14
这个怎么运作
矩形的长度和宽度以相同的名称存储在变量中。我们使用这些来借助表达式计算矩形的面积和周长。我们将表达式的结果存储length * breadth
在变量中area
,然后使用该print
函数进行打印。在第二种情况下,我们直接2 * (length + breadth)
在print函数中使用表达式的值。
另外,请注意Python如何打印输出。即使我们没有'Area is'
在变量和变量之间指定空格area
,Python 也会为我们提供一个干净的输出,并且程序更加可读(因为我们不需要担心字符串中的间距)用于输出)。这是Python如何让程序员轻松生活的一个例子。