官术网_书友最值得收藏!

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
主站蜘蛛池模板: 镇康县| 商水县| 无棣县| 波密县| 县级市| 福贡县| 南安市| 偏关县| 钟祥市| 武强县| 泰宁县| 崇阳县| 宝坻区| 兴化市| 临洮县| 农安县| 孝感市| 绵阳市| 竹北市| 鹰潭市| 井研县| 海晏县| 铁力市| 沅陵县| 水富县| 青浦区| 南部县| 乐业县| 拉萨市| 郴州市| 呼玛县| 曲靖市| 仁化县| 太湖县| 林口县| 广平县| 康保县| 云阳县| 桐柏县| 莒南县| 宁乡县|