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