02-Python運算符與優(yōu)先級

一、運算符

運算符(Operators,也翻譯為操作符),是發(fā)起運算的最簡單形式。

運算符的分類各有不同,我們就把運算符進行如下分類:

? 數(shù)學(算術)運算符(Arithmetic operators)

? 比較運算符(Comparison operators)

? 賦值運算符(Assignment operators)

? 邏輯運算符(Logical operators)

? 按位運算符(Bitwise operators)

? 成員運算符(Member operators)

? 身份運算符(Identity operators)

? 條件 (三元) 運算符(Conditional operator)


1. 數(shù)學運算符

+-*/ 取余// 取模% 冪乘 **
(Python浮點數(shù)的運算其包含的小數(shù)位數(shù)是不確定的,可能會影響結果)

  1. + 求兩個數(shù)字和 2 + 3 ==>5

  2. - 求兩個數(shù)字差 2 - 3 ==> -1

  3. * 求兩個數(shù)字積 2 * 3 ==> 6

  4. / 求兩個數(shù)字除 4 / 2 ==> 2

  5. // 求余,向下取接近除數(shù)的整數(shù) 10 // 3 ==> 3

  6. % 求兩個數(shù)字的余數(shù) 10 % 3 ==> 1

  7. ** 冪乘 2 * 3 ==> 8


2. 比較(關系)運算符:結果返回布爾值(True或False)

大于> 小于< 大于等于>= 小于等于<= 等于==(判斷值和類型是否相等) 不等于!=

# 數(shù)字與數(shù)字比較
5 > 4  # out: True
5 <= 2  # out: False
5 == 1  # out: False

# 字符串與字符串比較(比較ASCII碼值)
"5" > "6"  # out: False
"A" < "f"  # out: True

# 先比較第一個字符的ASCII碼值,若相同則比較下一個字符,否則返回布爾值
"db" > "cb"  # out: True

# 多層判斷,具有惰性求值或者邏輯短路的特點
1 > 6 < math.sqrt(9)  # out: False 


3.賦值運算符

運算符 描述
= 賦值運算符
+= 加法賦值運算符,a += b等價于a = a + b
-= 減法賦值運算符,a -= b等價于a = a - b
*= 乘法賦值運算符,a *= b等價于a = a * b
/= 除法賦值運算符,a /= b等價于a = a / b
//= 求余賦值運算符,a //= b等價于a = a // b
%= 取模賦值運算符,a %= b等價于a = a % b
**= 冪賦值運算符,a **= b等價于a = a ** b
a, b= 20, 10
a += b  # out: 30
a -= b  # out: 20
a *= b  # out: 200
a /= b  # out: 20.0
a //= 2  # out: 10.0
# !?。∽⒁鈇的值已經改變
a = 10  # out: 10
a %= 4  # out: 2
a **= 2  # out: 4


4. 邏輯運算符

特點:惰性求值或邏輯短路
優(yōu)先級:not > and > or

運算符 描述
and 布爾與,and兩端都為True則為True,否則為False
or 布爾或,or兩端只要有一個為True則為True,否則為False
not 布爾非,若x為True,返回False。若x為False,則返回True(返回結果只能是True或者False之一)
'''and: 遇假則停'''
4>6 and 8>3  # out: 3>5的值為False,不需要計算后面表達式
1<2 and 7>3  # out: 3<5的值為True,所以需要計算后面表達式

'''or: 遇真則停'''
3>5 or a>3  # out: 3>5的值為False,所以需要計算后面表達式
3<5 or a>3  # out: 3<5的值為True,不需要計算后面表達式

# 正確的執(zhí)行順序為:True or (True and False)
True or True and False  #out: True
# 正確的執(zhí)行順序為:not (not (True or (False and (not True))))
not not True or False and not True  # out: True


5.位運算符

運算符 描述
& 按位與運算符,參與運算的兩個值,若相應位都為1,則該位的結果為1,否則為0
| 按位或運算符,只要對應的兩個二進制值有一個為1時,結果就為1;全為0則為0
~ 按位取反運算符,對數(shù)據的每個二進制取反,即把1變0,0變1,最后結果再進行取反,即~n = -(n+1)
^ 按位異或運算符,當兩對應的二進制相應位不相同時,則該位的結果為1
<< 左移運算符,運算符的各二進制位全部左移若干位,高位丟棄,低位補0
>> 右移運算符,運算符的各二進制位全部右移若干位,高位補0,低位丟棄
3 & 2  # 3二進制為011,2二進制為010,按位與后為010,轉換為十進制就是2
3 | 2  # 3二進制為011,2二進制為010,按位或后為011,轉換為十進制就是3
3 ^ 2  # 3二進制為011,2二進制為010,按位異或后為001,轉換為十進制就是1
~3     # 3二進制為011,按位取反后為100,轉換為十進制就是4,結果為-4
8 << 2 # 8二進制為1000,左移兩位為100000(末尾補2個0),轉換為十進制就是32
8 >> 2 # 8二進制為1000,左移兩位為0010(高位補2個0),轉換為十進制就是2


6.成員運算符

運算符 描述
in 若在指定序列中找到指定值返回True,否則返回False
not in 若在指定序列中沒有找到指定值返回False,否則返回True
3 in (1,2,3)  # out: True
4 in (1,2,3)  # out: False
5 in range(1, 10)  # out: True
'a' in 'python'  # out: False
'abc' in 'abcdefg'  # out: True


7.身份運算符

運算符 描述
is 若兩個標識符引用自一個對象返回True,否則返回False
is not 若兩個標識符引用自不同對象返回True,否則返回False
a, b, c = 5, 3, 5
a is b  # out: False
a is c  # out: True
b is c  # out: False
a is not b  # out: True
a is not c  # out: False
#如果兩個對象是同一個,二者具有相同的內存地址
x = [1, 2, 3]
y = [1, 2, 3]
x is y  # out: False
x[0] is y[0]  # out: True


8.三目運算符

①三目的表達式及簡單使用

首先,我們可以看以下例子:

'''正常邏輯寫法'''
if a>b:
    max = a;
else:
    max = b;
    
'''三目運算簡便寫法'''
max = a if a>b else b

Python中的三目運算不像其他編程語言中三目運算符判斷條件 ? 條件為真執(zhí)行的代碼 : 為假執(zhí)行的代碼的寫法,而是使用已有的 if else 關鍵字來實現(xiàn)相同的功能。

在Python中三目的表達式格式如下:exp1(True) if condition else exp2(False)

condition 是判斷條件,exp1 和 exp2 是兩個表達式。若 condition 成立(結果為真),就執(zhí)行 exp1,并把 exp1 的結果作為整個表達式的結果;如果 condition 不成立(結果為假),就執(zhí)行 exp2,并把 exp2 的結果作為整個表達式的結果。

max = a if a>b else b
'''
那么上述例子我們就可以很好的理解它的意思:
    如果 a>b 成立,就把 a 作為整個表達式的值,并賦給變量 max;
    如果 a> b 不成立,就把 b 作為整個表達式的值,并賦給變量 max。
'''

②三目運算符的嵌套用法

Python 三目運算符支持嵌套,因此可以構成更加復雜的表達式。在嵌套時需要注意 if 和 else 的配對,例如:

a if a>b else c if c>d else d
# 上述表達式應該理解為:a if a>b else ( c if c>d else d )


# 實例:判斷兩個數(shù)字的關系
a = int( input("Input a: ") )
b = int( input("Input b: ") )
print("a大于b") if a>b else ( print("a小于b") if a<b else print("a等于b") )

#輸入a: Input a: 45
#輸入b: Input b: 100
#得到以下結果: a小于b

'''
該程序是一個嵌套的三目運算符。程序先對 a>b 求值,
如果該表達式為 True,程序就返回執(zhí)行第一個表達式 print("a大于b"),
否則將繼續(xù)執(zhí)行 else 后面的內容,也就是:

( print("a小于b") if a<b else print("a等于b") )

進入該表達式后,先判斷 a<b 是否成立,
如果 a<b 的結果為 True,將執(zhí)行 print("a小于b"),否則執(zhí)行 print("a等于b")。
'''


二、運算符優(yōu)先級

Python運算符優(yōu)先級

優(yōu)先級順序: 依次降低

運算符 說明 優(yōu)先級 結合性
( ) 小括號 19
x[i] 或 x[ i1: i2 [:i3] ] 索引運算符 18
x.attribute 屬性訪問 17
** 乘方 16
~ 按位取反 15
+(正號)、- (負號) 符號運算符 14
*、/、%、// 乘除 13
+、- 加減 12
>>、<< 位移 11
& 按位與 10
^ 按位異或 9
| 按位或 8
==、!=、>、>= 、<、<= 比較運算符 7
is、is not is身份運算符 6
in、not in in成員運算符 5
not 邏輯非 4
and 邏輯與 3
or 邏輯或 2
exp1,exp2 逗號運算符 1

Python 運算符的結合性

結合性:就是當一個表達式中出現(xiàn)多個優(yōu)先級相同的運算符時,先執(zhí)行哪個運算符(先執(zhí)行左邊的叫左結合性,先執(zhí)行右邊的叫右結合性)

100 / 25 * 16  # 64
'''
其中"/"和"*"的優(yōu)先級相同,這個時候就不能只依賴運算符優(yōu)先級決定了,需要參考運算符的結合性。
`/`和`*`都具有左結合性,因此先執(zhí)行左邊的除法,再執(zhí)行右邊的乘法,最終結果是 64。
'''

總結

當一個表達式中出現(xiàn)多個運算符時,Python 會先比較各個運算符的優(yōu)先級,按照優(yōu)先級從高到低的順序依次執(zhí)行;當遇到優(yōu)先級相同的運算符時,再根據結合性決定先執(zhí)行哪個運算符:如果是左結合性就先執(zhí)行左邊的運算符,如果是右結合性就先執(zhí)行右邊的運算符。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容