簡明Python3教程 7.運算符和表達式


簡介

你寫的大多數邏輯行都包含表達式。表達式的一個簡單例子是2 + 3。一個表達式可分為操作符和操作數兩部分。

操作符的功能是執行一項任務;操作符可由一個符號或關鍵字代表,如+ 。操作符需要數據以供執行其功能,這些數據名為操作數。在上面的例子中,23是操作數。

操作符

我們在這里簡單地介紹操作符及其用途:

你可在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得到813 * 3 * 3 * 3

/

將x除以y。

4 / 3 得到 1.3333333333333333

//

取整除

返回最大的整數商。

4 // 3 得到 1

%

取模

返回余數。

8% 3 得到2-25.5% 2.25得到1.5.

<<

左位移

將操作數向左移動若干bit位。(數字在內存中以二進制表示)

2 << 2 得到 82在二進制中表示為10 。左位移兩bit位后得到1000,十進制中表示為8

>>

右位移

將操作數向右移動若干bit位。

11 >> 1得到511二進制下表示為1011,右位移一位后得到101,十進制中表示為5

&

按位與

數的按位與。

5 & 3 得到 1

|

按位或

數的按位或。

5 | 3得到7

^

按位異或

數的按位異或。

5 ^ 3得到6

~

按位翻轉

x的按位翻轉是-(x+1)。

~5得到-6

<

小於

返回x是否小於y。所有比較運算符返回布爾值TrueFalse。請注意布爾值大小心敏感。

5 < 3得到False3 < 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為Falsex 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簡化程序員工作的例子。

總結

我們了解了書寫任何程序都需要的磚塊:操作符、操作數和表達式。下一步我們將了解如何在程序中使用這三者。

 

 

 

--------------Python書籍推薦-----------------
Python基礎教程-第2版.修訂版 
 
 
PYTHON核心編程
 
 
零基礎學Python


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM