簡介
你寫的大多數邏輯行都包含表達式。表達式的一個簡單例子是2 + 3。一個表達式可分為操作符和操作數兩部分。
操作符的功能是執行一項任務;操作符可由一個符號或關鍵字代表,如+ 。操作符需要數據以供執行其功能,這些數據名為操作數。在上面的例子中,2和3是操作數。
操作符
我們在這里簡單地介紹操作符及其用途:
你可在Python解釋器中交互驗證下面給出的例子。例如,驗證2 + 3,在Python解釋器提示符中輸入:
>>> 2 + 3 5 >>> 3 * 5 15 >>>
操作符 |
名稱 |
用途 |
舉例 |
---|---|---|---|
+ |
加 |
使兩操作數相加 |
3 + 5 得到 8. 'a' + 'b' 得到 'ab'. |
- |
減 |
求出前后兩數之差。若第一個操作數未寫則默認為0。 |
-5.2 得道一個負數, 50 - 24得到26。 |
* |
乘 |
得出兩數乘積或返回重復若干次的字符串。 |
2 * 3得到6。'la' * 3得到'lalala'. |
** |
冪 |
返回x的y次冪。 |
3 ** 4得到81 ( 3 * 3 * 3 * 3) |
/ |
除 |
將x除以y。 |
4 / 3 得到 1.3333333333333333。 |
// |
取整除 |
返回最大的整數商。 |
4 // 3 得到 1。 |
% |
取模 |
返回余數。 |
8% 3 得到2。 -25.5% 2.25得到1.5. |
<< |
左位移 |
將操作數向左移動若干bit位。(數字在內存中以二進制表示) |
2 << 2 得到 8。 2在二進制中表示為10 。左位移兩bit位后得到1000,十進制中表示為8。 |
>> |
右位移 |
將操作數向右移動若干bit位。 |
11 >> 1得到5, 11二進制下表示為1011,右位移一位后得到101,十進制中表示為5。 |
& |
按位與 |
數的按位與。 |
5 & 3 得到 1。 |
| |
按位或 |
數的按位或。 |
5 | 3得到7。 |
^ |
按位異或 |
數的按位異或。 |
5 ^ 3得到6。 |
~ |
按位翻轉 |
x的按位翻轉是-(x+1)。 |
~5得到-6。 |
< |
小於 |
返回x是否小於y。所有比較運算符返回布爾值True或False。請注意布爾值大小心敏感。 |
5 < 3得到False,3 < 5得到True. 比較運算符可任意連接,如3 < 5 < 7得到True. |
> |
大於 |
返回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 |
布爾非 |
若X為True則返回False,反之亦然。 |
x = True; not x返回False。 |
and |
布爾與 |
無論y值為何,若X為False則x and y 返回False。 |
x = False; y = True; x and y由於x為False返回False。此例中Python因為已知and左值為False而不會計算整個布爾表達式,這是短路求值法。 |
or |
布爾或 |
若x為True則返回True,否則返回y的布爾值。 |
x = True; y = False; x or y返回True。布爾或同樣使用短路求值。 |
數學運算與賦值捷徑
對一個變量進行運算后再賦值給其自身是常見的,因此對於此類表達式有對應捷徑:
你可將:
a = 2; a = a * 3
寫成:
a = 2; a *= 3
注意:變量 = 變量 操作符 表達式變為了變量 操作符= 表達式
運算順序
如果你遇到了類似2 + 3 * 4的表達式,首先做加法還是乘法?先做乘法,高中數學如是說。這意味着乘法運算符比加法運算符有更高的優先級。
下表中以從低到高的順序給出了Python中操作符優先級列表。給定一個表達式,Python將會首先計算在此表中靠下的操作符與表達式,然后計算靠上的操作符與表達式。
此表取自Python reference manual,包括了所有的運算符。建議使用圓括號標注具有較高優先級的部分,這可使程序更可讀。詳情請看改變計算順序。
操作符 |
描述 |
---|---|
lambda |
Lambda表達式 |
or |
布爾或 |
and |
布爾與 |
not x |
布爾非 |
in, not in |
成員測試 |
is, is not |
同一性測試 |
<, <=, >, >=,!=, == |
比較運算符 |
| |
按位或 |
^ |
按位異或 |
& |
按位與 |
<<, >> |
位移 |
+, - |
加減 |
*, /, //, % |
乘除、取整除、取余 |
+x, -x |
正負 |
~x |
按位非 |
** |
冪 |
x.attribute |
屬性引用 |
x[index] |
下標 |
x[index1:index2] |
尋址段 |
f(arguments …) |
函數調用 |
(expressions, …) |
顯示綁定或元組 |
[expressions, ...] |
顯示列表 |
{key:datum, …} |
顯示字典 |
表中仍未接觸到的運算符將會在后續章節中說明。
擁有相同優先級的運算符位於上表的同一行中,例如+和-擁有相同優先級。
改變計算順序
使用括號可增加表達式可讀性。例如2 + (3 * 4)就比需要運算符優先級知識的2 + 3 * 4更好理解。但是仍要避免過量使用括號,例如(2 + (3 * 4))。
使用括號還可以改變運算順序,例如在(2 + 3) * 4中括號使表達式先進行加法運算后進行乘法運算。
結合律
操作符在優先級相同的情況下從左向右計算,例如2 + 3 + 4等價於(2 + 3) + 4。另一些運算符如賦值運算符從右向左計算,例如a = b = c等價於a = (b = c)。
表達式
例子:
#!/usr/bin/python # Filename: 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函數打印變量值。在第二種情況中,我們直接使用print函數打印表達式2 * (length + breadth)的值。
另外即便我們沒有專門在'Area is'與變量area中加入空格,Python仍美觀地打印出了此輸出。Python自動為我們生成了一個漂亮的輸出格式並因此令程序更可讀:我們不需要擔心輸出字符串中的空格。這是另一個Python簡化程序員工作的例子。
總結
我們了解了書寫任何程序都需要的磚塊:操作符、操作數和表達式。下一步我們將了解如何在程序中使用這三者。

