Python運算符優先級和結合性一覽表


所謂優先級,就是當多個運算符同時出現在一個表達式中時,先執行哪個運算符。

例如對於表達式a + b * c,Python 會先計算乘法再計算加法;b * c的結果為 8,a + 8的結果為 24,所以 d 最終的值也是 24。先計算*再計算+,說明*的優先級高於+

Python 支持幾十種運算符,被划分成將近二十個優先級,有的運算符優先級不同,有的運算符優先級相同,請看下表。

表 1 Python 運算符優先級和結合性一覽表
運算符說明 Python運算符 優先級 結合性 優先級順序
小括號 ( ) 19
︿
 |
 |
 |
 |
 |
 |
 |
 |
 |
 |
 |
 |
 |
 |
 |
 |
 |
 |
 |
 | 
 |
 |
索引運算符 x[i] 或 x[i1: i2 [:i3]] 18
屬性訪問 x.attribute 17
乘方 ** 16
按位取反 ~ 15
符號運算符 +(正號)、-(負號) 14
乘除 *、/、//、% 13
加減 +、- 12
位移 >>、<< 11
按位與 & 10
按位異或 ^ 9
按位或 | 8
比較運算符 ==、!=、>、>=、<、<=  7
is 運算符 is、is not 6
in 運算符 in、not in 5
邏輯非 not 4
邏輯與 and 3
邏輯或 or 2
逗號運算符 exp1, exp2 1


結果表1中的運算符優先級,我們嘗試分析下面表達式的結果:

4+4<<2

+的優先級是 12,<<的優先級是 11,+的優先級高於<<,所以先執行 4+4,得到結果 8,再執行 8<<2,得到結果 32,這也是整個表達式的最終結果。

像這種不好確定優先級的表達式,我們可以給子表達式加上( ),也就是寫成下面的樣子:

(4+4) << 2

這樣看起來就一目了然了,不容易引起誤解。

當然,我們也可以使用( )改變程序的執行順序,比如:

4+(4<<2)

則先執行 4<<2,得到結果 16,再執行 4+16,得到結果20。

雖然 Python 運算符存在優先級的關系,但我不推薦過度依賴運算符的優先級,這會導致程序的可讀性降低。因此,我建議讀者:

  • 不要把一個表達式寫得過於復雜,如果一個表達式過於復雜,可以嘗試把它拆分來書寫。
  • 不要過多地依賴運算符的優先級來控制表達式的執行順序,這樣可讀性太差,應盡量使用( )來控制表達式的執行順序。直線電機原理結構圖

Python 運算符結合性

所謂結合性,就是當一個表達式中出現多個優先級相同的運算符時,先執行哪個運算符:先執行左邊的叫左結合性,先執行右邊的叫右結合性。

例如對於表達式對於100 / 25 * 16/*的優先級相同,應該先執行哪一個呢?這個時候就不能只依賴運算符優先級決定了,還要參考運算符的結合性。/*都具有左結合性,因此先執行左邊的除法,再執行右邊的乘法,最終結果是 64。

Python 中大部分運算符都具有左結合性,也就是從左到右執行;只有單目運算符(例如 not 邏輯非運算符)、賦值運算符和三目運算符例外,它們具有右結合性,也就是從右向左執行。表 1 中列出了所有 Python 運算符的結合性。

總結

當一個表達式中出現多個運算符時,Python 會先比較各個運算符的優先級,按照優先級從高到低的順序依次執行;當遇到優先級相同的運算符時,再根據結合性決定先執行哪個運算符:如果是左結合性就先執行左邊的運算符,如果是右結合性就先執行右邊的運算符。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM