『無為則無心』Python基礎 — 12、Python運算子詳細介紹

繁華似錦Fighting發表於2021-06-29

說明:變數的賦值與計算都離不開表示式,表示式的運算依賴於變數、常量和運算子。那麼我們先說一說什麼是表示式。

1、表示式介紹

  • Python表示式是變數、常量、運算子、方法呼叫的序列,它執行指定的計算並返回某個確定的值。
  • 表示式不會對程式產生實質性的影響, 一般只是返回一個結果。
  • 在Python中,如果在互動模式中只輸入一個表示式,直譯器會自動將表示式的結果輸出。如果是在Python檔案中只輸入表示式,執行檔案都不會有任何輸出的。

示例1:互動模式中只寫表示式。

在互動模式中只輸入一個表示式,直譯器會自動將表示式的結果輸出,如下圖所示:

image

示例2:Python檔案中只寫表示式的語句會沒有任何輸出。

如下圖所示:

image

檔案中的100+20015+7這兩個表示式都沒有在控制檯中輸出結果。

2、運算子

運算子用於執行程式程式碼運算。

(1)運算子的分類

Python的常用運算子分為5類

  • 算數運算子
  • 賦值運算子
  • 複合賦值運算子
  • 比較運算子
  • 邏輯運算子

(2)算數運算子

Python中算數運算子如下

運算子 描述 例項
+ 1 + 1 輸出結果為 2
- 1-1 輸出結果為 0
* 2 * 2 輸出結果為 4
/ 10 / 2 輸出結果為 5
// 整除 9 // 4 輸出結果為2
% 取餘 9 % 4 輸出結果為 1,也叫取模
** 指數 2 ** 4 輸出結果為 16,即 2 * 2 * 2 * 2
() 小括號 小括號用來提高運算優先順序,即 (1 + 2) * 3 輸出結果為 9

注意:混合運算優先順序順序:()高於 ** 高於 * / // % 高於 + -

示例

# 1、運算子:加、減、乘
# 所有運算中,只要有浮點數參加的運算,一定會得到一個浮點數
a = 10.5 + 5
print(f'a = {a}') # a = 15.5

# 2、運算子:除
# 除法不管得到什麼數,結果都是小數(浮點型),//(整除不會)
b = 4 / 2
print(f'b = {b}') # b = 2.0

# 3、運算子://(整除),只會保留整數位
# 運算結果只會得到一個整型,結果只保留整數部分。
c = 4 // 2
print(f'c = {c}') # c = 2
# 如果除數或被除數是小數,則返回一個浮點數
c = 4.567 // 2
print(f'c = {c}') # c = 2.0


# 4、用變數d的值減去2,然後再賦值給d
d = 10
d = d - 2
print(f'd = {d}') # d = 8

"""
 5、如果將字串和數字相乘,
    則會對字串進行復制操作,
    將字串重複指定次數
 6、如果對字元進行加法運算,
    就是字串的拼接
"""
e = 'hello' + ' ' + 'world' 
print(e) # hello world

f = ('hello' + ' ') * 2
print(f) # hello hello 

# 7、除0異常
g = 5 / 0
# 報出異常:ZeroDivisionError: division by zero

(3)賦值運算子

運算子 描述 例項
= 賦值 =右側的結果賦值給等號左側的變數

(1)單個變數賦值

num = 1
print(num)

(2)多個變數賦值

num1, float1, str1 = 10, 0.5, 'hello world'
print(f"num1 = {num1}")
print(f"float1 = {float1}")
print(f"str1 = {str1}")

# 輸出結果如下:
# num1 = 10
# float1 = 0.5
# str1 = hello world

(3)多變數賦相同值

a = b = 10
print(f"a = {a}")
print(f"b = {b}")

# 輸出結果如下:
# a = 10
# b = 10

(4)複合賦值運算子

當直譯器執行到複合賦值運算子時,先計算算數運算子的表示式,再將算數運算子執行後的結果賦值到等號左邊的變數。

複合賦值運算子如下

運算子 描述 例項
+= 加法賦值運算子 c += a 等價於 c = c + a
-= 減法賦值運算子 c -= a 等價於 c = c - a
*= 乘法賦值運算子 c *= a 等價於 c = c * a
/= 除法賦值運算子 c /= a 等價於 c = c / a
//= 整除賦值運算子 c //= a 等價於 c = c // a
%= 取餘賦值運算子 c %= a 等價於 c = c % a
**= 冪賦值運算子 c ** = a 等價於 c = c ** a

示例

# 輸出101  a = a + 1,最終a = 100 + 1
a = 100
a += 1
print(a) # 101

# 輸出6  b = b * 3,最終b = 2 * 3
b = 2
b *= 3
print(b)

# 輸出13, 先算運算子右側1 + 2 = 3, c += 3 , 推匯出c = 10 + 3
c = 10
c += 1 + 2
print(c)
# 注意: 先算複合賦值運算子右面的表示式,再算複合賦值運算.
d = 100
d *= 3 + 4 
print(d) # 700
# 3 + 4 = 7 * 100 = 700

在對浮點數做算術運算時,結果也會返回一個浮點數。

(5)比較運算子

比較運算子也叫關係運算子,來比較兩個值之間的關係,總會返回一個布林值, 如果關係成立,返回True,否則返回False,通常用來判斷。

比較運算子如下

運算子 描述 例項
== 判斷相等。如果兩個運算元的結果相等,則條件結果為真(True),否則條件結果為假(False) 如a=3,b=3,則(a == b) 為 True
!= 不等於 。如果兩個運算元的結果不相等,則條件為真(True),否則條件結果為假(False) 如a=3,b=3,則(a == b) 為 True。如a=1,b=3,則(a != b) 為 True
> 運算子左側運算元結果是否大於右側運算元結果,如果大於,則條件為真,否則為假 如a=7,b=3,則(a > b) 為 True
< 運算子左側運算元結果是否小於右側運算元結果,如果小於,則條件為真,否則為假 如a=7,b=3,則(a < b) 為 False
>= 運算子左側運算元結果是否大於等於右側運算元結果,如果大於,則條件為真,否則為假 如a=7,b=3,則(a < b) 為 False。如a=3,b=3,則(a >= b) 為 True
<= 運算子左側運算元結果是否小於等於右側運算元結果,如果小於,則條件為真,否則為假 如a=3,b=3,則(a <= b) 為 True

示例

# 1、關係運算子基本使用
a = 7
b = 5
print(a == b)  # False
print(a != b)  # True
print(a < b)   # False
print(a > b)   # True
print(a <= b)  # False
print(a >= b)  # True

# 2、數字可以可布林值比較,True=1,False=0
print(1 == True) # True
print(2 < True) # False
print(-1 < False) # True

# 3、數字和字串之間不能進行比較
print(2 > '1')
# TypeError: '>' not supported between instances of 'int' and 'str'

"""
# 4、字串和字串之間可以進行比較
    在Python中可以對兩個字串進行大於(等於)或小於(等於)的運算時,
    實際上比較的是字串對應的Unicode編碼。
    比較兩個字串的Unicode編碼時,是逐位比較的。
   
    利用該特性可以對字串按照字母順序進行排序,但是對於中文來說意義不是特別大。
    
    注意:如果不希望比較兩個字串的Unicode編碼,
    	則需要通過資料型別轉換
    	將字串轉換為數值型然後再比較。
"""
#  a(0061) 和 b(0062) 比較
print('a' > 'b') # False

# 比較兩個字串的Unicode編碼時,是逐位比較的。
# 也就是第一位和第一位比,第二位和第二位比,
# 只有在第一位沒有比出結果的時候(相等),才比第二位。
print('ab' > 'bc') # 實際上就是a和b比較,結果False
print('ab' > 'b') # 同上一句結果
print('af' > 'ac') # True
# 沒有肯定小於有字元
print('a' > 'ac') # False

# 將字串轉換成數值型在比較
print(int('5') > int('7')) # False
print(float('5.115') > float('4.64')) # True


"""
 5、== 和 != 比較的是結果物件的值,而不是id。
    物件包括id(地址)、type(型別)、value(值)
    比較id用is 和 is not
    is 比較兩個物件是否是同一個物件,比較的是物件的id。
    is not 比較兩個物件是否不是同一個物件,比較的是物件的id。
    這裡有個印象就可以,以後說完可變物件,再詳細說明。
"""
print(1 == True) # True
print(id(1),id(True)) # 8791323868224 8791323365904
print(1 is True) # False
print(1 is not True) # True

3、邏輯運算子

邏輯運算子主要用來做一些邏輯判斷。

邏輯運算子如下:

運算子 邏輯表示式 描述 例項
and x and y 邏輯"與":如果 x 為 False,x and y 返回 False,否則它返回 y 的值。(一假則假,都真才真) True and False, 返回 False。
or x or y 邏輯"或":如果 x 是 True,它返回 True,否則它返回 y 的值。(一真則真,都假才假) False or True, 返回 True。
not not x 邏輯"非":如果 x 為 True,返回 False 。如果 x 為 False,它返回 True。(就是結果取反) not True 返回 False, not False 返回 True
"""
 1、and 邏輯與 (一假則假,都真才真)
    and可以對符號兩側的值進行與運算。
    只有在符號兩側的值都為True時,才會返回True,只要有一個False就返回False

    Python中的與運算是短路的與,也就是說與運算是找False的,
   	如果第一個值為False,則不再看第二個表示式的結果。
"""
print(True and True) # True
print(True and False) # False
print(False and True) # False
print(False and False) # False

# 驗證and為短路與,找False結束
# 第一個值是True,會執行print()
True and print('1你猜我出來嗎?')
# 第一個值是False,不會執行print()
False and print('2你猜我出來嗎?')


"""
 2、or 邏輯或 (一真則真,都假才假)
    or 可以對符號兩側的值進行或運算。
    或運算兩個值中只要有一個True,就會返回True。

    Python中的或運算是短路的或, 或運算是找True的,
    如果第一個值為True,則不再看第二個值。
"""
print(True or True) # True
print(True or False) # True
print(False or True) # True
print(False or False) # False

# 驗證or為短路或,找True結束
# 第一個值是True,不會執行print()
True or print('1你猜我出來嗎?')
# 第一個值是False,會執行print()
False or print('2你猜我出來嗎?')


"""
 3、not 邏輯非(取反)
    not可以對符號右側的值進行非運算
    對於布林值,非運算會對其進行取反操作,True變False,False變True
    對於非布林值,非運算會先將其轉換為布林值,然後再取反:
        空性值為False,其他為True。
"""
a = True
# 如果表示式不賦值。不會對變數a有任何影響,
# 只是建立了一個新物件儲存了結果,
# 同資料型別轉換所講的
not a
# 對變數a賦值之後,表達是結果才影響變數a。
a = not a
print(f"a = {a}") # a = False



# 4、邏輯運算子左右的表示式加上(),並不會影響運算的結果。
# 為什麼要加上(),避免歧義,增加可讀性。
a = 1
b = 2
c = 3
print((a < b) and (b < c))  # True
print((a > b) and (b < c))  # False
print((a > b) or (b < c))   # True
print(not (a > b))          # True

擴充1:數字之間的邏輯運算

# 也就是非布林值的與或運算
#   當我們對非布林值進行與或運算時,Python會將其當做布林值運算,最終會返回原值。
#
#   1、與運算的規則
#       與運算是找False的,
#       如果第一個值是False,則不看第二個值,則直接返回第一個值。(返回0)
#       如果第一個值是True,否則返回第二個值。(看第二個值:False返回0,True返回原值)
#   2、或運算的規則
#       或運算是找True的,
#       如果第一個值是True,則不看第二個值,則直接返回第一個值(原值)。
#       如果第一個值是False,否則返回第二個值。(看第二個值:False返回0,True返回原值) 

a = 0
b = 1
c = 2

# and運算子,只要有一個值為0,則結果為0,否則結果為最後一個非0數字
print(a and b)  # 0
print(b and a)  # 0
print(a and c)  # 0
print(c and a)  # 0
print(b and c)  # 2
print(c and b)  # 1

# or運算子,只有所有值為0結果才為0,否則結果為第一個非0數字
print(a or b)  # 1
print(a or c)  # 2
print(b or c)  # 1

"""
總結:
兩種描述都正確,我確認過。
看自己適合哪種理解思路,就用哪種。
"""

擴充2:Python中邏輯運算子可以連續使用

# 邏輯運算子(補充)
# 邏輯運算子可以連著使用

"""
 1 < 2 < 3 的意思不是1小於2同時小於3,
 相當於 1 < 2 and 2 < 3,
 是以中間數值進行比較的
"""
result = 1 < 2 < 3
print(result) # True

# 相當於 10 < 20 and 15 < 20
result = 10 < 20 > 15
print(result) # True

4、Python運算子優先順序

  • 運算子的優先順序可以根據Python官方提供的優先順序的表格來查詢,
  • 在表格中位置越靠下的運算子優先順序越高,優先順序越高的越優先計算。
  • 如果優先順序一樣則自左向右計算。

Python官方提供的優先順序的表格,我們安裝好Python的直譯器就在本地有一份官方文件了。

官方文件位置:[開始] —> [所有程式] —> [ Python 3.7] —> [Python 3.7 Manuals (64-bit)]。

開啟文件:[The Pthon Language Reference] —> [Expressions] —> [ Operator precedence] 即可檢視。

如下圖所示:

image

提示:

關於優先順序的表格,你知道有這麼一個東西就夠了,千萬不要去記。

在開發中如果遇到優先順序不清楚的,主要通過小括號來改變運算順序。

相關文章