你寫的大多數(shù)邏輯行都包含表達(dá)式。表達(dá)式的一個(gè)簡(jiǎn)單例子是2 + 3。一個(gè)表達(dá)式可分為操作符和操作數(shù)兩部分。
操作符的功能是執(zhí)行一項(xiàng)任務(wù);操作符可由一個(gè)符號(hào)或關(guān)鍵字代表,如+ 。操作符需要數(shù)據(jù)以供執(zhí)行其功能,這些數(shù)據(jù)名為操作數(shù)。在上面的例子中,2和3是操作數(shù)。
我們?cè)谶@里簡(jiǎn)單地介紹操作符及其用途:
你可在Python解釋器中交互驗(yàn)證下面給出的例子。例如,驗(yàn)證2 + 3,在Python解釋器提示符中輸入:
>>> 2 + 35>>> 3 * 515>>>
操作符 | 名稱 | 用途 | 舉例 |
---|---|---|---|
+ | 加 | 使兩操作數(shù)相加 | 3 + 5 得到 8. 'a' + 'b' 得到 'ab'. |
- | 減 | 求出前后兩數(shù)之差。若第一個(gè)操作數(shù)未寫則默認(rèn)為0。 | -5.2 得道一個(gè)負(fù)數(shù), 50 - 24得到26。 |
* | 乘 | 得出兩數(shù)乘積或返回重復(fù)若干次的字符串。 | 2 * 3得到6。'la' * 3得到'lalala'. |
** | 冪 | 返回x的y次冪。 | 3 ** 4得到81 ( 3 * 3 * 3 * 3) |
/ | 除 | 將x除以y。 | 4 / 3 得到 1.3333333333333333。 |
// | 取整除 | 返回最大的整數(shù)商。 | 4 // 3 得到 1。 |
% | 取模 | 返回余數(shù)。 | 8% 3 得到2。 -25.5% 2.25得到1.5. |
<< | 左位移 | 將操作數(shù)向左移動(dòng)若干bit位。(數(shù)字在內(nèi)存中以二進(jìn)制表示) | 2 << 2 得到 8。 2在二進(jìn)制中表示為10 。左位移兩bit位后得到1000,十進(jìn)制中表示為8。 |
>> | 右位移 | 將操作數(shù)向右移動(dòng)若干bit位。 | 11 >> 1得到5, 11二進(jìn)制下表示為1011,右位移一位后得到101,十進(jìn)制中表示為5。 |
& | 按位與 | 數(shù)的按位與。 | 5 & 3 得到 1。 |
| | 按位或 | 數(shù)的按位或。 | 5 | 3得到7。 |
^ | 按位異或 | 數(shù)的按位異或。 | 5 ^ 3得到6。 |
~ | 按位翻轉(zhuǎn) | x的按位翻轉(zhuǎn)是-(x+1)。 | ~5得到-6。 |
< | 小于 | 返回x是否小于y。所有比較運(yùn)算符返回布爾值True或False。請(qǐng)注意布爾值大小心敏感。 | 5 < 3得到False,3 < 5得到True. 比較運(yùn)算符可任意連接,如3 < 5 < 7得到True. |
> | 大于 | 返回x是否大于y。 | 5 > 3 得到True。如果兩個(gè)操作符都是數(shù)字,解釋器會(huì)將其轉(zhuǎn)換到同一類型后再比較。若否則返回False。 |
<= | 小于等于 | 返回x是否小于等于y。 | x = 3; y = 6; x <= y返回True。 |
>= | 大于等于 | 返回x是否大于等于y。 | x = 4; y = 3; x >= 3得到True。 |
== | 等于 | 比較兩操作數(shù)是否相等。 | x = 2; y = 2; x == y得到True。 x = 'str'; y = 'stR'; x == y得到False。 x = 'str'; y = 'str'; x == y得到True。 |
!= | 不等于 | 比較兩操作數(shù)是否不相等。 | 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因?yàn)橐阎猘nd左值為False而不會(huì)計(jì)算整個(gè)布爾表達(dá)式,這是短路求值法。 |
or | 布爾或 | 若x為True則返回True,否則返回y的布爾值。 | x = True; y = False; x or y返回True。布爾或同樣使用短路求值。 |
對(duì)一個(gè)變量進(jìn)行運(yùn)算后再賦值給其自身是常見的,因此對(duì)于此類表達(dá)式有對(duì)應(yīng)捷徑:
你可將:
a = 2; a = a * 3
寫成:
a = 2; a *= 3
注意:變量 = 變量 操作符 表達(dá)式變?yōu)榱?tt style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px">變量 操作符= 表達(dá)式
如果你遇到了類似2 + 3 * 4的表達(dá)式,首先做加法還是乘法?先做乘法,高中數(shù)學(xué)如是說。這意味著乘法運(yùn)算符比加法運(yùn)算符有更高的優(yōu)先級(jí)。
下表中以從低到高的順序給出了Python中操作符優(yōu)先級(jí)列表。給定一個(gè)表達(dá)式,Python將會(huì)首先計(jì)算在此表中靠下的操作符與表達(dá)式,然后計(jì)算靠上的操作符與表達(dá)式。
此表取自Python reference manual,包括了所有的運(yùn)算符。建議使用圓括號(hào)標(biāo)注具有較高優(yōu)先級(jí)的部分,這可使程序更可讀。詳情請(qǐng)看改變計(jì)算順序。
操作符 | 描述 |
---|---|
lambda | Lambda表達(dá)式 |
or | 布爾或 |
and | 布爾與 |
not x | 布爾非 |
in, not in | 成員測(cè)試 |
is, is not | 同一性測(cè)試 |
<, <=, >, >=,!=, == | 比較運(yùn)算符 |
| | 按位或 |
^ | 按位異或 |
& | 按位與 |
<<, >> | 位移 |
+, - | 加減 |
*, /, //, % | 乘除、取整除、取余 |
+x, -x | 正負(fù) |
~x | 按位非 |
** | 冪 |
x.attribute | 屬性引用 |
x[index] | 下標(biāo) |
x[index1:index2] | 尋址段 |
f(arguments …) | 函數(shù)調(diào)用 |
(expressions, …) | 顯示綁定或元組 |
[expressions, ...] | 顯示列表 |
{key:datum, …} | 顯示字典 |
表中仍未接觸到的運(yùn)算符將會(huì)在后續(xù)章節(jié)中說明。
擁有相同優(yōu)先級(jí)的運(yùn)算符位于上表的同一行中,例如+和-擁有相同優(yōu)先級(jí)。
使用括號(hào)可增加表達(dá)式可讀性。例如2 + (3 * 4)就比需要運(yùn)算符優(yōu)先級(jí)知識(shí)的2 + 3 * 4更好理解。但是仍要避免過量使用括號(hào),例如(2 + (3 * 4))。
使用括號(hào)還可以改變運(yùn)算順序,例如在(2 + 3) * 4中括號(hào)使表達(dá)式先進(jìn)行加法運(yùn)算后進(jìn)行乘法運(yùn)算。
操作符在優(yōu)先級(jí)相同的情況下從左向右計(jì)算,例如2 + 3 + 4等價(jià)于(2 + 3) + 4。另一些運(yùn)算符如賦值運(yùn)算符從右向左計(jì)算,例如a = b = c等價(jià)于a = (b = c)。
例子:
#!/usr/bin/python# Filename: expression.pylength = 5breadth = 2area = length * breadthprint('Area is', area)print('Perimeter is', 2 * (length + breadth))
輸出:
$ python expression.py Area is 10 Perimeter is 14
工作原理:
矩形的長(zhǎng)與寬存儲(chǔ)在同名變量中。我們通過計(jì)算面積與周長(zhǎng)的表達(dá)式得出這兩個(gè)值。我們將表達(dá)式length * breadth的值存儲(chǔ)在變量area中,并使用print函數(shù)打印變量值。在第二種情況中,我們直接使用print函數(shù)打印表達(dá)式2 * (length + breadth)的值。
另外即便我們沒有專門在'Area is'與變量area中加入空格,Python仍美觀地打印出了此輸出。Python自動(dòng)為我們生成了一個(gè)漂亮的輸出格式并因此令程序更可讀:我們不需要擔(dān)心輸出字符串中的空格。這是另一個(gè)Python簡(jiǎn)化程序員工作的例子。
我們了解了書寫任何程序都需要的磚塊:操作符、操作數(shù)和表達(dá)式。下一步我們將了解如何在程序中使用這三者。
聯(lián)系客服