Python运算符优先级v1
在Python中,运算符优先级决定了表达式中各个部分的计算顺序。当多个运算符出现在同一个表达式中时,优先级高的运算符会先被计算。Python的运算符优先级从高到低如下:
- 括号 ():括号内的表达式会首先被计算。
- 指数运算符 ** 或 **=:指数(幂)计算。<x **= 3 # 等价于 x = x ** 3>
- 正负号运算符 +、- 和取反运算符 ~:一元运算符,用于改变操作数的符号或进行位取反。
- 乘法类运算符 、/、//(整除)、%*(取模)**:这些运算符用于执行乘法、除法、整除和取模操作。
- 加法类运算符 + 和减法类运算符 -:这些运算符用于执行加法和减法操作。
- 位移运算符 <<、>>:用于执行位左移和位右移操作。
- 按位与运算符 &:执行位与操作。
- 按位异或运算符 ^:执行位异或操作。
- 按位或运算符 |:执行位或操作。
- 比较运算符 <=、<、>、>=、!=、==:用于比较操作数的值。
- 身份运算符 is 和 is not:检查两个对象是否是同一个对象。
- 成员运算符 in 和 not in:检查一个值是否在一个序列中。
- 逻辑与运算符 and:执行逻辑与操作。
- 逻辑或运算符 or:执行逻辑或操作。
如果同一个优先级的运算符出现在同一个表达式中,Python会按照运算符的结合性来确定计算顺序。大多数情况下,从左到右(从左结合性)计算,但指数运算符和赋值运算符是从右到左(从右结合性)计算的。例如,表达式 a = b = c = 1 会先从右到左计算赋值,最终所有变量 a、b 和 c 都会被赋值为 1。
常见的错误:
x = 2
赋值与比较运算符混淆:=赋值运算、==比较运算
if x = 5: # 错误的比较运算,应该是 if x == 5:
逻辑运算符的优先级:and优先级高于or
if x > 0 or y > 0 and z > 0: # 可能不是你想要的逻辑
if (x > 0 or y > 0) and z > 0: # 正确的逻辑
# print(1 and x **= 1) # 语法错误
print(1 and x) # 2
print(1 or x) # 1
幂运算符与赋值混淆:**=幂赋值运算符、**幂运算符
result = x **= 2 # 语法错误,x 会被赋值为 x 的平方,而 result 将是 x 的原始值
result = x ** 2
递增和递减运算符的位置:+=递增、-=递减,运算符应该放在变量后面
x = x + 1 # 正确
x += 1 # 正确且简洁
x = +x+1 #
x = +x 1 # 语法错误
位运算符与逻辑运算符混淆:位运算符(&、|、^、~)、逻辑运算符(not、and、or)
if x & y: # 错误,如果 x 和 y 是整数,这将执行位与操作,而不是逻辑与操作
if x and y: # 正确,执行逻辑与操作
not>and>or
not 0 and 1 # 1
not 0 or 0 # True
not 0 # True
not 0 and 0 # 0
not 1 and 1 # False
not 1 or 2 # 2
错误的字符串连接:字符串连接应该使用+运算或join()方法
s = "Hello" & "World" # 错误,Python不支持使用 & 连接字符串
# 正确的方式
s = "Hello" + "World" # 使用 + 运算符
# 或者
s = "".join(["Hello", "World"]) # 使用 join() 方法
错误的除法:在Python 3中,/ 运算符执行浮点数除法,而 // 执行整数除法。如果你想要整数除法但在Python 2中使用 /,将会得到一个浮点数结果,这可能导致逻辑错误。
x = 7 / 2 # 在Python 3中,x 的值是 3.5
x = 7 // 2 # 在Python 3中,x 的值是 3
运算符优先级和结合性对于编写清晰、无歧义的代码非常重要。在编写复杂的表达式时,使用括号来明确指定计算顺序通常是一个好习惯。