運算符與表達式
你所編寫的大多數語句(邏輯行)都包含了表達式(Expressions)。一個表達式的簡單例子便是
2+3
。表達式可以拆分成運算符(Operators)與操作數(Operands)。
運算符(Operators)是進行某些操作,并且可以用諸如
+
等符号或特殊關鍵詞加以表達的功能。運算符需要一些資料來進行操作,這些資料就被稱作操作數(Operands)。在上面的例子中
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'
-
(乘方)**
- 傳回 x 的 y 次方。
-
3 ** 4
(即81
)。3 * 3 * 3 * 3
-
(除)/
- x 除以 y
-
13 / 3
4.333333333333333
-
(整除)//
- x 除以 y 并對結果向下取整至最接近的整數。
-
13 // 3
4
-
-13 // 3
-5
-
(取模)%
- 傳回除法運算後的餘數。
-
13 % 3
1
-25.5 % 2.25
1.5
-
(左移)<<
- 将數字的位向左移動指定的位數。(每個數字在記憶體中以二進制數表示,即 0 和1)
-
2 << 2
8
用二進制數表示為2
10
- 向左移 2 位會得到
這一結果,表示十進制中的1000
8
-
(右移)>>
- 将數字的位向右移動指定的位數。
-
11 >> 1
5
-
在二進制中表示為11
,右移一位後輸出1011
101
5
-
(按位與)&
- 對數字進行按位與操作。 1
-
5 & 3
1
-
(按位或)|
- 對數字進行按位或操作。 2
-
5 | 3
7
-
(按位異或)^
- 對數字進行按位異或操作。 3
-
5 ^ 3
6
-
(按位取反) 4~
- x 的按位取反結果為 -(x+1)。
-
~5
。有關本例的更多細節可以參閱: http://stackoverflow.com/a/11810203-6
-
(小于)<
- 傳回 x 是否小于 y。所有的比較運算符傳回的結果均為
或True
。請注意這些名稱之中的大寫字母。False
-
5 < 3
,False
3 < 6
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
-
(布爾“非”) 5not
- 如果 x 是
,則傳回True
。如果 x 是False
False
True
-
x = True; not x
False
- 如果 x 是
-
(布爾“與”) 6and
-
,則False
x and y
,否則傳回 y 的計算值。False
- 當 x 是
時,False
将傳回x = False; y = True; x and y
。在這一情境中,Python 将不會計算 y,因為它已經了解 and 表達式的左側是False
,這意味着整個表達式都将是False
而不會是别的值。這種情況被稱作短路計算(Short-circuit Evaluation)。False
-
-
(布爾“或”) 7or
-
True
,否則它将傳回 y 的計算值。True
-
x = Ture; y = False; x or y
。在這裡短路計算同樣适用。Ture
-
數值運算與指派的快捷方式
一種比較常見的操作是對一個變量進行一項數學運算并将運算得出的結果傳回給這個變量,是以對于這類運算通常有如下的快捷表達方式:
a = 2
a = a * 3
同樣也可寫作:
a = 2
a *= 3
要注意到
變量 = 變量 運算 表達式
會演變成
變量 運算 = 表達式
求值順序 8
如果你有一個諸如
2 + 3 * 4
的表達式,是優先完成加法還是優先完成乘法呢?我們的高中數學知識會告訴我們應該先完成乘法。這意味着乘法運算符的優先級要高于加法運算符。
下面将給出 Python 中從最低優先級(最少綁定)到最高優先級(最多綁定)的優先級表。這意味着,在給定的表達式中,Python 将優先計算表中位列于後的較高優先級的運算符與表達式。
為了保持完整,下表是從
Python 參考手冊中引用而來。你最好使用圓括号操作符來對運算符與操作數進行分組,以更加明确地指定優先級。這也能使得程式更加可讀。你可以閱讀
改變運算順序來了解更多的細節。
-
:Lambda 表達式lambda
-
:條件表達式if - else
-
:布爾“或”or
-
:布爾“與”and
-
:布爾“非”not x
-
:比較,包括成員資格測試(Membership Tests)和身份測試(Identity Tests)。in, not in, is, is not, <, <=, >, >=, !=, ==
-
:按位或|
-
:按位異或^
-
:按位與&
-
:移動<<, >>
-
:加與減+, -
-
:乘、除、整除、取餘*, /, //, %
-
:正、負、按位取反+x, -x, ~x
-
:求幂**
-
:下标、切片、調用、屬性引用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
結合性 9
運算符通常由左至右結合。這意味着具有相同優先級的運算符将從左至右的方式依次進行求值。如
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