運算符優先級 —— Python教程

本節教程將講解 Python 運算符的優先級和關聯性,在這以前你應該理解了 Python 運算符python

對於表達式,Python 解釋器將處理優先級更高的運算符,而且除了指數運算符(**)外,幾乎全部運算符的處理方式都從左到右執行。函數

運算符優先級

工做方式

當咱們將值、變量、運算符和函數調用放在一塊兒時,就會造成表達式。當表達式執行完後,Python 解釋器就會把它認爲是有效的表達式。post

像這樣:spa

>>> 3 + 4
7
複製代碼

3 + 4 是一個表達式,它包含一個運算符和兩個操做數。因此,一個複雜的語句能夠包含多個運算符。爲了執行復雜的表達式,Python 須要列出運算符的優先級,就是要控制程序操做的順序。code

優先級列表

下面是一個複合表達式包含多個運算符的例子:教程

# 先作乘法再作加法結果就是 17
5 + 4 * 3
複製代碼

也能夠使用括號 () 更改操做順序,括號比算數運算符優先級更高:索引

# 先作括號內加法再作乘法結果是 27
(5 + 4) * 3
複製代碼

下面用表格列出運算符從高到低的優先級:get

運算符 用法
{ } 括號(分組)
f(args...) 函數調用
x[index:index] 切片
x[index] 索引值
x.attribute 屬性
** 指數
~x 取反
+x,-x 正、負值
*、/、% 乘、除、求餘
+、- 加、減
<<、>> 左移、右移
& 按位 AND
^ 按位 XOR
| 按位 OR
is、not、in、is、is not、< 、<=、>、>=、<>、!=、== 比較、算數、身份
not x 布爾 NOT
and 布爾 AND
or 布爾 OR
lambda lambda 表達式

關聯運算符

上表每組能夠有多個運算符,這意味着此組運算符的優先級都相同。因此當多個運算符有相同優先級時,它們之間的關聯性就決定了最後的執行順序。table

處理關聯性

當有多個相同優先級運算符一同處理時,除指數(**)外,Python 都將按照從左到右的順序依次執行。class

舉個例子:

# 具備相同優先級,從左到右執行結果爲 1
print(4 * 7 % 3)

# 括號有更高優先級,執行結果爲 0
print(2 * (10 % 5))
複製代碼

提到過其中指數(**)運算符不一樣,它是按照從右向左順序執行:

# 從右到左執行結果爲 256
print(4 ** 2 ** 2)

# 括號有更高優先級,可是執行結果還會爲 256
print((4 ** 2) ** 2)
複製代碼

非關聯運算符

Python 中其實還有一些不支持關聯性的運算符,例如賦值運算符和比較運算符。因此針對這些非關聯運算符有特殊的規則,這就須要咱們特別記憶。

例如表達式 5 < 7 < 9 不能理解成 (5 < 7) < 95 < (7 < 9),而是應該當作 5 < 7 and 7 < 9 且從左到右求值。

還有對語法的支持,像 a = b = c 這樣的賦值運算符是可執行的,可是像 a = b += c 就會出現錯誤。

x = 11, y = 12, z = 13

# 不正確的表達式
# 非關聯運算符
# 錯誤 -> SyntaxError: invalid syntax
x = y += 12
複製代碼

(完)

相關文章
相關標籤/搜索