- Python程序設計基礎教程(慕課版)
- 薛景 陳景強 朱旻如 龔樂君
- 2516字
- 2019-10-23 16:57:53
2.3 運算符與表達式
編寫的大多數語句都包含了表達式(Expressions)。一個表達式的簡單例子是2+3。表達式可以拆分成運算符(Operators)與操作數(Operands)。
運算符是進行某些操作,并且可以用諸如+等符號或特殊關鍵詞加以表達的功能。運算符需要一些數據來進行操作,這些數據就被稱作操作數。在上面的例子中,2和3就是操作數。
2.3.1 運算符

運算符
接下來將簡要介紹各類運算符及它們的用法。
為了更好地理解各類運算符的作用,強烈建議在Python的命令行解釋器中輸入以下范例中的表達式內容,并觀察輸出結果。例如,要想測試表達式2+3,可以在交互式Python解釋器的提示符后輸入如下代碼。
>>> 2 + 3 5 >>> 3 * 5 15 >>>
下面是Python語言支持的運算符。
(1)+(加號):兩個對象相加。
例如,3+5輸出8,'a'+'b'輸出'ab'。
(2)-(減號)
從一個數中減去另一個數,如果第一個操作數不存在,則假定為零。
例如,-5.2將輸出一個負數,50-24輸出26。
(3)*(乘號)
給出兩個數的乘積,或返回字符串重復指定次數后的結果。
例如,2*3輸出6,'la'*3輸出'lalala'。
(4)**(乘方,冪運算)
返回x的y次方。
例如,3**4輸出81(即3*3*3*3)。
(5)/(除號,結果為實數)
x除以y
例如,13/3輸出4.333333333333333。
(6)//(整除,結果為整數)
x除以y并對結果向下取整至最接近的整數。
例如,13//3輸出4,-13//3輸出-5。
(7)%(取模,求余數的運算)
%返回除法運算后的余數。
例如,13%3輸出1,-25.5%2.25輸出1.5。
(8)<<(按位左移)
<<將數字的位向左移動指定的位數(每個數字在內存中以二進制數表示,即0和1)。
例如,2<<2輸出8,2用二進制數表示為10。向左移2位會得到1000這一結果,表示十進制中的8。
(9)>>(按位右移)
>>將數字的位向右移動指定的位數。
例如,11>>1輸出5。11在二進制中表示為1011,右移一位后輸出101這一結果,表示十進制中的5。
(10)&(按位與)
&對數字進行按位與操作。
例如,5&3輸出1。按位與是針對二進制數的操作,是指比較兩個二進制數的每一位,如果兩個相應的二進位都為1,則此位為1,否則為0。在本例中,5的二進制表達為101,3的二進制表達為11(為補全位數進行按位操作寫作011),則按位與操作后的結果為001,對應的十進制數為1。
(11)|(按位或)
|對數字進行按位或操作。
例如,5|3輸出7。按位或是針對二進制數的操作,是指比較兩個二進制數的每一位,如果兩個相應的二進位有一個為1,則此位為1,否則為0。在本例中,101與011進行按位或操作后的結果為111,對應的十進制數為7。
(12)^(按位異或)
^對數字進行按位異或操作。
例如,5^3輸出6。按位異或是針對二進制數的操作,是指比較兩個二進制數的每一位,如果兩個相應的二進位不同,則此位為1,相同為0。在本例中,101與011進行按位異或操作的結果為110,對應的十進制數為6。
(13)~(按位取反)
~表示x的按位取反結果為-(x+1)。
例如,~5輸出-6。按位取反也稱作“按位取非”“求非”或“取反”,沈潔元譯本譯作“按位翻轉”,是針對二進制數的操作,是指對兩個二進制數的每一二進位都進行取反操作,0換成1,1換成0。受篇幅與學識所限,本例具體原理不在此處贅述,讀者只需按照給出的公式記憶即可。
(14)<(小于)
<返回x是否小于y。所有比較運算符的返回結果均為True或False。請注意這些名稱中的大寫字母。
例如,5<3輸出False,3<6輸出True。
比較可以任意組成鏈接,例如,3<5<7返回True。
(15)>(大于)
>返回x是否大于y。
例如,5>3返回True。如果兩個操作數均為數字,它們首先將會被轉換至一種共同的類型,否則它將總是返回False。
(16)<=(小于等于)
<=返回x是否小于或等于y。
例如,x=3;y=6;x<=y返回True。
(17)>=(大于等于)
>=返回x是否大于或等于y。
例如,x=4;y=3;x>=3返回True。
(18)==(等于)
==比較兩個對象是否相等。例如:
x=2;y=2;x==y返回True。
x='str';y='stR';x==y返回False。
x='str';y='str';x==y返回True。
(19)!=(不等于)
!=比較兩個對象是否不相等。
x=2;y=3;x!=y返回True。
(20)not(邏輯“非”)
not表示如果x是Ture,則返回False;如果x是False,則返回True。
例如,x=Ture;not x返回False。
(21)and(邏輯“與”)
and表示如果x是False,則x and y返回False,否則返回y的計算值。
例如,當x是False時,x=False;y=True;x and y將返回False。在這一情境中,Python將不會計算y,因為它已經了解and表達式的左側是False,這意味著整個表達式都將是False而不會是別的值。這種情況稱作短路計算(Short-circuit Evaluation)。
(22)or(邏輯“或”)
or表示如果x是True,則返回True,否則返回y的計算值。
例如,x=Ture;y=False;x or y將返回Ture。在這里短路計算同樣適用。
2.3.2 運算符的優先級
如果有一個諸如2+3*4的表達式,是優先完成加法運算還是優先完成乘法運算呢?基礎數學知識會告訴我們應該先完成乘法運算。這意味著乘法運算符的優先級要高于加法運算符。
下面給出Python中從最低優先級到最高優先級的優先級列表。這意味著,在給定的表達式中,Python將優先計算列表中位置靠后的那些優先級較高的運算符與表達式。
為了保持完整,本書從Python參考手冊中引用了表2-2中的內容。在日常工作中,強烈建議使用圓括號操作符來對運算符與操作數進行分組,以更加明確地指定優先級,這也能使程序更加可讀。
表2-2 運算的優先級(從低到高排序)

到目前為止,表2-2中還沒有遇到的運算符將會在后面的章節中解釋。
在表2-2中位列同一行的運算符具有相同優先級。例如,+和-具有相同的優先級。
2.3.3 改變運算順序
為了使表達式更加易讀,可以使用括號。例如,2+(3*4)要比2+3*4更加容易理解,因為后者還要求了解運算符的優先級。當然使用括號同樣也要適度(而不要過度),同時亦應不要像(2+(3*4))這般冗余。
使用括號還有一個額外的優點——它能幫助我們改變運算的順序。例如,如果希望在表達式中計算乘法之前先計算加法,那么可以將表達式寫作(2+3)*4。
2.3.4 表達式
表達式(Expressions)簡單來說就是一個算式,它將常量、運算符、括號、變量等以能求得結果的有意義內容組合一起,可以用以下程序來理解表達式的作用。
# 例 2.2 利用表達式求解算式的結果 length = 5 breadth = 2 area = length * breadth print('Area is', area) print('Perimeter is', 2 * (length + breadth))
輸出:
Area is 10 Perimeter is 14
矩形的長度(Length)與寬度(Breadth)存儲在以各自名稱命名的變量中。在程序中可以使用它們并借助表達式來計算矩形的面積(Area)與周長(Perimeter)。接著,將表達式length*breadth的結果存儲在變量area中并將其通過使用print函數打印出來。在程序的最后一條語句中,程序直接在print函數中使用了表達式2*(length+breadth)的值。
同時,需要注意到Python是如何漂亮地打印出輸出結果的。盡管我們沒有特別地在Area is和變量area之間指定空格,但Python會自動補充,因此程序運行后就能得到整潔的輸出結果,同時程序也因為這樣的處理方式而變得更加易讀。這便是Python讓程序員的工作變得更加便捷美好的一個范例。
2.3.5 eval()函數
如果將一個表達式放在了一串字符中,例如:
>>>exp="100/2*3"
那么如何才能讓Python求出這個字符串中的表達式的值呢?這里推薦一個非常神奇的函數——eval()函數,它的功能就是計算一串字符串中的合法Python表達式的值,比如在上述語句之后,繼續輸入以下語句。
>>>eval(exp)
執行上述程序后,將會在屏幕上得到這串字符中算式的值,即:
150.0
- Go Web編程
- Deploying Node.js
- JavaScript 從入門到項目實踐(超值版)
- Vue.js前端開發基礎與項目實戰
- 軟件測試工程師面試秘籍
- Java 9 Programming Blueprints
- Java軟件開發基礎
- Troubleshooting PostgreSQL
- 名師講壇:Spring實戰開發(Redis+SpringDataJPA+SpringMVC+SpringSecurity)
- Learning Hunk
- Getting Started with Python
- Python Web自動化測試設計與實現
- Secret Recipes of the Python Ninja
- Instant GLEW
- 虛擬現實建模與編程(SketchUp+OSG開發技術)