適合人群:零基礎自學者 | 編程小白快速入門
閱讀時長:約8分鐘
文章目錄
- 一、問題:Python 同一運算符的本質與實戰?
- 1、例子1:雙胞胎身份證驗證
- 2、答案:
- (1)is 同一運算符介紹
- (2)is與==區別
- 二、問題:Python整數緩存機制深度解析?
- 1、例子1:小整數緩存驗證(交互模式)
- 2、例子2:文件模式下的特殊緩存規則
- 3、答案:
- (1)int整數緩存
- 三、問題:Python的成員運算符?
- 1、例子1:購物清單檢查
- 2、答案:
- (1)成員運算符介紹
- 四、動手試一試
- 任務1:同一運算符驗證
- 任務2:智能門禁權限驗證
一、問題:Python 同一運算符的本質與實戰?
1、例子1:雙胞胎身份證驗證
# 創建兩個長相相同的雙胞胎(值相同)
twin1 = "張三"
twin2 = "張三" # 檢查是否是同一個人(內存地址)
print(twin1 is twin2) # 輸出:True → Python字符串駐留機制優化內存使用 # 創建兩個不同的字符串對象
twin3 = "張" + "三"
twin4 = "張三"
print(twin3 is twin4) # 輸出:True(解釋同上) # 強制創建不同對象(長字符串)
profile1 = "張三_身份證號:110101199901011234"
profile2 = "張三_身份證號:110101199901011234"
print(profile1 is profile2) # 輸出:False → 長字符串內存地址不同
print(profile1 == profile2) # 輸出:True → 內容相同
2、答案:
(1)is 同一運算符介紹
is
同一運算符用于比較兩個對象的儲存單元,實際比較的是對象的地址。
運算符 | 描述 |
---|---|
is | is是判斷兩個標識符是不是引用同一個對象 |
is not | is not 是判斷兩個標識符是不是引用不同對象 |
(2)is與==區別
is
用于判斷兩個變量引用對象是否為同一個,既比較對象的地址。==
用于判斷引用變量引用對象的值是否相等,默認調用對象的_eq_()
方法。is
運算符比==
效率高,在變量和None
進行比較時,應該使用is
二、問題:Python整數緩存機制深度解析?
1、例子1:小整數緩存驗證(交互模式)
# 在Python交互模式(REPL)中測試
a = 100
b = 100
print(a is b) # 輸出:True → 小整數被緩存復用 c = 257
d = 257
print(c is d) # 輸出:False → 超出緩存范圍(-5~256)
2、例子2:文件模式下的特殊緩存規則
# 文件名:test_cache.py
a = 257
b = 257
print(a is b) # 輸出:True → 文件模式下相同字面量會被優化為同一對象 c = 1000
d = 1000
print(c is d) # 輸出:True(文件模式下)
3、答案:
(1)int整數緩存
- 交互模式下,Python為優化性能,對小整數進行預緩存處理,范圍[-5,256],底層通過C語言數組實現,連續分配空間,便于查找,而非是所有整數對象。
- 文件模式下,所有數字都會緩存,范圍是[-無窮大,+無窮大]。[-5,256]仍然底層用數組實現;不在[-5,256]出現的數,緩存到鏈表中,不連續分配空間。
關鍵規則速查表
模式 | 緩存范圍 | 典型現象 |
---|---|---|
交互模式 | -5 ~ 256 | 257以上整數每次新建對象 |
文件模式 | 不限 | 相同字面量自動復用緩存對象 |
三、問題:Python的成員運算符?
1、例子1:購物清單檢查
# 定義購物清單
shopping_list = ["牛奶", "面包", "雞蛋", "蘋果"] # 檢查是否要買香蕉
need_banana = "香蕉" in shopping_list
print(f"需要購買香蕉嗎?{need_banana}") # 輸出:False # 檢查是否已買雞蛋
egg_check = "雞蛋" not in shopping_list
print(f"雞蛋還沒買嗎?{egg_check}") # 輸出:False(已購買)
2、答案:
(1)成員運算符介紹
in
、not in
:成員運算符測試實例中包含了一系列的成員,包括字符串、列表或元組。
運算符 | 描述 |
---|---|
in | 如果在指定的序列中找到值返回 True,否則返回 False |
not in | 不在,則返回True |
四、動手試一試
任務1:同一運算符驗證
# 根據整數緩存規則判斷輸出結果
a = -5
b = -5
print(a is b) # 輸出:_____ c = 257
d = 257
print(c is d) # 輸出:_____ # 提示:在Python文件中運行
參考答案:
print(a is b) # True(小整數緩存范圍[-5,256])
print(c is d) # True(文件模式下相同字面量復用對象)
解析:
- 文件模式下所有相同字面量整數會復用同一對象
- 交互模式中超出-5~256范圍的整數會創建新對象
任務2:智能門禁權限驗證
allowed_users = ["張三", "李四", "王五"]
current_user = "李四" # 補全成員運算符判斷用戶權限
access = ______
print(f"訪問權限:{access}") # 目標輸出:True
參考答案:
access = current_user in allowed_users
關鍵點:
in
運算符直接檢查元素是否存在于集合中- 適用于字符串、列表、元組等可迭代對象
📢 互動區
👉 遇到問題?在評論區:
- 描述問題(帶代碼截圖更好)
- 分享學習心得
- 給文章提建議
? 支持作者:點贊 | 收藏 | 關注
你的三連是我更新的最大動力!