小白學 Python(6):基礎運算符(下)

  • 2019 年 10 月 25 日
  • 筆記

人生苦短,我選Python

前文傳送門

小白學 Python(1):開篇

小白學 Python(2):基礎數據類型(上)

小白學 Python(3):基礎數據類型(下)

小白學 Python(4):變數基礎操作

小白學 Python(5):基礎運算符(上)

前言

上一篇文章我們介紹了算術運算符和比較運算符。本篇我們繼續介紹其餘的幾個:

  • 賦值運算符
  • 邏輯運算符
  • 成員運算符
  • 身份運算符

賦值運算符

Python 中,使用 = 號表示賦值。當然,Python 還提供了其他賦值方式,直接幫我們簡化了寫法,如 +=-= ,沒有編程經驗的同學可能會比較懵逼。

其實小編當年在學 Java 的時候第一次接觸也是很懵的,這裡其實無需懵逼,簡單理解 a += 1 其實就是 a = a + 1 。這只是一種簡化寫法。

題外話(建:有編程經驗人士閱讀,無編程經驗可以跳過):

在很多程式語言中如 Java ,都會有自增 i++ 這種寫法,但是 Python 並沒有,這是因為 += 是代表改變了變數,相當於重新生成了一個變數,把操作後的結果賦予這個新生成的變數。但是在 Python 中,變數是以內容為基準而不是像 Java 中以變數名為基準,所以只要你的數字內容是 5 ,不管你起什麼名字,這個變數的 ID 是相同的,同時也就說明了 Python 中一個變數可以以多個名稱訪問。這樣的設計邏輯決定了 Python 中數字類型的值是不可變的,例如:a 和 b 都是 5,當你改變了 a 時,b 也會跟著變,這當然不是我們希望的。

Python 中的賦值表達式可見下表:

運算符 描述
= 賦值運算符
+= 加法賦值運算符,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

上面的表格光看描述總感覺有點乾巴巴的,下面我們還是來舉幾個栗子給各位同學演示一下:

a = 10  b = 20    c = a + b  print("c = a + b 的值為:", c)    c += a  print("c += a 的值為:", c)    c *= a  print("c *= a 的值為:", c)    c /= a  print("c /= a 的值為:", c)    c = 2  c %= a  print("c %= a 的值為:", c)    c **= a  print("c **= a 的值為:", c)    c //= a  print("c //= a 的值為:", c)

運行結果如下:

c = a + b 的值為: 30  c += a 的值為: 40  c *= a 的值為: 400  c /= a 的值為: 40.0  c %= a 的值為: 2  c **= a 的值為: 1024  c //= a 的值為: 102

邏輯運算符

邏輯運算符有三種,分別是與、或、非。

這個其實是離散數學中的概念,不知道其他專業的同學有沒有學,反正學電腦的肯定有這門課。emmmmmmmmmmmmm 我們其實是 Python 教程,就不扯離散數學了,有興趣的同學請自行百度吧。

  • and :邏輯「與」運算符,只有當and兩邊都是真,結果才是真
  • or :邏輯「或」運算符,只要當or一邊的是真的,結果就是真
  • not :邏輯「非」運算符,反轉邏輯值

這麼看介紹有點抽象,我們直接上栗子,看了栗子大家就懂了,其實很簡單。

print(True and True)  # True  print(True and False)  # False  print(True or True)  # True  print(True or False)  # True  print(False or False)  # False  print(not True)  # False  print(not False)  # True

成員運算符

成員運算符用來判斷在指定的序列中有沒有找到目標值,這個序列可以是字元串、列表和元祖。

  • in : 如果在指定的序列中找到值返回 True,否則返回 False。
  • not in : 如果在指定的序列中沒有找到值返回 True,否則返回 False。

前面的文章尚未介紹列表和元祖,下面的示例僅使用字元串來做演示:

str = "asdfghjkl"    if 'a' in str:      print('a 在字元串 str 中')  else:      print('a 不在字元串 str 中')    if 'a' not in str:      print('a 不在字元串 str 中')  else:      print('a 在字元串 str 中')

輸出結果:

a 在字元串 str 中  a 在字元串 str 中

身份運算符

身份運算符用於比較兩個對象的存儲單元。

  • is : is 是判斷兩個標識符是不是引用自一個對象
  • is not : is not 是判斷兩個標識符是不是引用自不同對象

示例如下:

a = 20  b = 20    if a is b:      print("a 和 b 有相同的標識")  else:      print("a 和 b 沒有相同的標識")    if id(a) == id(b):      print("a 和 b 有相同的標識")  else:      print("a 和 b 沒有相同的標識")    # 修改變數 b 的值  b = 30  if a is b:      print("a 和 b 有相同的標識")  else:      print("a 和 b 沒有相同的標識")    if a is not b:      print("a 和 b 沒有相同的標識")  else:      print("a 和 b 有相同的標識")

注意: id() 函數用於獲取對象記憶體地址。

輸出結果如下:

a 和 b 有相同的標識  a 和 b 有相同的標識  a 和 b 沒有相同的標識  a 和 b 沒有相同的標識

其實這個輸出結果可以看出來,在 Python ,如果兩個數值一樣的變數, Python 並不會在記憶體中重新開闢記憶體空間,而是會復用已有的記憶體空間。

示例程式碼

本系列的所有程式碼小編都會放在程式碼管理倉庫 Github 和 Gitee 上,方便大家取用。

示例程式碼-Github

示例程式碼-Gitee