【記錄】Python|Python支持if 1<a<2、if not a、if a is None這三種寫法

今天讓AI幫我寫代碼,突然發現寫出來一句類似1<a<2,我頓感疑惑:不是只能用and連接嗎?

一試發現真行,那我辛辛苦苦寫了好幾年的 (條件1) and (條件2) 算什么?算我勤快嗎?😭

常常寫Javascript的有共情一下的嗎?😥

if a也是,原來不需要寫if a==''啊……

if not a也是,竟然支持字符串、列表、字典等多種比較方式呢!

if a is None就更是反我的直覺了,它居然比a==None效率更高!(眾所周知Javascript里面NaN !== NaN,并且NaN===NaN是False,這讓我對Python的None也不敢亂用……)


文章目錄

    • 鏈式比較
      • 具體說明:
      • 示例:
      • 為什么其他語言不支持?
      • 總結:
    • 真值測試
      • 主要區別:
      • 示例:
      • 結論:
    • a is None
      • 關鍵點:
      • 示例:
      • 常見用途:
      • 注意:

鏈式比較

在 Python 中,1 < a < 2 這種鏈式比較(chained comparison)從 Python 最早的版本 就支持了,這是 Python 語言設計的一個特性,而不是后來新增的語法。

具體說明:

  • Python 的鏈式比較會被解釋為 (1 < a) and (a < 2),但它的計算方式更高效(a 只會被計算一次)。
  • 這個特性在 Python 1.0(1994年發布)就已經存在,并一直延續至今。

示例:

a = 1.5
print(1 < a < 2)  # True

等價于:

print(1 < a and a < 2)  # True

為什么其他語言不支持?

許多其他編程語言(如 C、Java、JavaScript)不支持這種寫法,因為它們會把 1 < a < 2 解析為 (1 < a) < 2,而 (1 < a) 返回的是布爾值(TrueFalse),再與 2 比較會導致類型不匹配或邏輯錯誤。

總結:

Python 從一開始就支持 1 < a < 2 這種鏈式比較語法,這是 Python 語言的一個特色特性,使得代碼更簡潔易讀。

真值測試

在 Python 中,not struct.dmaslen(struct.dmas) == 0 并不完全等效,盡管在某些情況下它們可能產生相同的結果。它們的區別取決于 struct.dmas 的具體實現和類型。

主要區別:

  1. not struct.dmas

    • 這是 Python 的“真值測試”(truthiness testing),會調用 __bool__()__len__() 方法(如果 __bool__ 未定義)。
    • 如果 struct.dmas 是空列表、空字典、空字符串、NoneFalse、數值 0 或空容器,not struct.dmas 會返回 True
    • 但如果 struct.dmas 是一個自定義對象,它的 __bool__()__len__() 方法可能返回非預期值。
  2. **len(struct.dmas) == 0****:

    • 這顯式檢查 struct.dmas 的長度是否為 0,要求對象必須實現 __len__() 方法。
    • 如果 struct.dmas 沒有 __len__() 方法(如數值、None 或某些自定義對象),會拋出 TypeError

示例:

class CustomObject:def __len__(self):return 0obj = CustomObject()print(not obj)       # True(調用 __len__())
print(len(obj) == 0) # True

但如果 struct.dmasNone

struct.dmas = None
print(not struct.dmas)       # True(None 是假值)
print(len(struct.dmas) == 0) # TypeError: object of type 'NoneType' has no len()

結論:

  • 如果 struct.dmas 一定是序列/容器(如列表、字符串、字典等),兩者通常等效。
  • 如果 struct.dmas 可能是其他類型(如 None、自定義對象等),兩者可能不等效,甚至 len() 會報錯。
  • 更推薦用 not struct.dmas,除非你明確需要檢查長度且確保對象是序列。

a is None

在Python中,a is None 是一種檢查變量 a 是否等于 None 的寫法。這里的 is 是Python的身份運算符(identity operator),用于比較兩個對象是否是同一個對象(即內存地址是否相同),而不僅僅是值相等。

關鍵點:

  1. None 是Python中的單例對象,所有 None 值在內存中都是同一個對象。
  2. is 比較的是對象的身份(內存地址),而 == 比較的是值。
  3. a is Nonea == None 更推薦,因為:
    • 更高效(直接比較內存地址)。
    • 更符合Python的慣例(PEP 8推薦用 isis not 比較 None)。

示例:

a = None
b = None
c = []print(a is None)  # True,因為 a 就是 None
print(b is None)  # True,因為 b 也是 None
print(c is None)  # False,因為 c 是空列表,不是 None# 不推薦的寫法(雖然結果可能相同):
print(a == None)  # True,但不建議這樣寫

常見用途:

  • 檢查函數默認參數是否被傳遞:
    def foo(x=None):if x is None:x = []
    
  • 判斷變量是否未初始化或作為空值占位符。

注意:

  • 對于除 None 之外的其他對象(如數字、字符串、列表等),通常用 == 比較值,而非 is。例如:
    x = 1000
    print(x is 1000)  # 可能為False(因Python小整數優化,結果不確定)
    print(x == 1000)  # True,總是用 == 比較值
    

總結:a is None 是Python中判斷變量是否為 None 的標準寫法。

本賬號所有文章均為原創,歡迎轉載,請注明文章出處:https://shandianchengzi.blog.csdn.net/article/details/148404731。百度和各類采集站皆不可信,搜索請謹慎鑒別。技術類文章一般都有時效性,本人習慣不定期對自己的博文進行修正和更新,因此請訪問出處以查看本文的最新版本。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/85773.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/85773.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/85773.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Matlab | MATLAB 中的插值詳解

MATLAB 中的插值詳解 插值是數值分析中的核心技術,用于在已知數據點之間估計未知點的值。MATLAB 提供了完整的插值函數庫,涵蓋一維到高維數據,支持多種插值方法。以下從基礎到高級全面解析: 一、插值核心概念 1. 數學本質 給定數據點 ( x i , y i ) (x_i, y_i) (<

正則表達式檢測文件類型是否為視頻或圖片

// 配置化文件類型檢測&#xff08;集中管理支持的類型&#xff09; const FILE_TYPE_CONFIG {video: {extensions: [mp4, webm, ogg, quicktime], // 可擴展支持更多格式regex: /^video\/(mp4|webm|ogg|quicktime)$/i // 自動生成正則},image: {extensions: [jpeg, jpg, png,…

Redis最佳實踐——熱點數據緩存詳解

Redis在電商熱點數據緩存中的最佳實踐 一、熱點數據定義與識別 1. 熱點數據特征 高頻訪問&#xff08;QPS > 1000&#xff09;數據規模適中&#xff08;單條 < 10KB&#xff09;數據變化頻率低&#xff08;更新間隔 > 5分鐘&#xff09;業務關鍵性高&#xff08;直接…

8088單板機C語言sprintf()格式化串口輸出---Prj04

#include "tiny_stdarg.h" // 使用自定義可變參數實現#define ADR_273 0x0200 #define ADR_244 0x0400 #define LED_PORT 0x800 #define PC16550_THR 0x1f0 #define PC16550_LSR 0x1f5 / //基本的IO操作函數 / char str[]"Hello World! 20250531 Ve…

【面試】音視頻面試

H.264 與 H.265 有什么區別&#xff1f; 1&#xff09;主要區別 H.265 也稱為高效視頻編碼 (HEVC)&#xff0c;是 H.264 的升級和更高級的版本&#xff1b;H.265 的編碼架構大致上 和 H.264 的架構相似&#xff0c;主要也包含&#xff1a;幀內預測&#xff08;intra predicti…

Windows系統下npm報錯node-gyp configure got “gyp ERR“解決方法

感謝原博主&#xff0c;此文參考網址&#xff1a;https://zhuanlan.zhihu.com/p/398279220 確保已經安裝node.js &#xff08;官方網址&#xff1a;https://nodejs.org/zh-cn/download&#xff09; 首先在命令窗口執行命令安裝windows-build-tools&#xff1a; npm install -…

git stash命令用法

git stash 是 Git 中一個非常有用的命令&#xff0c;它可以臨時保存當前工作區的修改&#xff0c;讓你可以切換到其他分支或者處理其他任務&#xff0c;而不需要提交這些還未完成的修改。 一、基本用法 1. 保存當前修改&#xff08;包括暫存區和工作區的內容&#xff09; git…

【C語言練習】080. 使用C語言實現簡單的數據庫操作

080. 使用C語言實現簡單的數據庫操作 080. 使用C語言實現簡單的數據庫操作使用原生APIODBC接口第三方庫ORM框架文件模擬1. 安裝SQLite2. 示例代碼:使用SQLite創建數據庫、表和插入數據3. 編譯和運行4. 示例運行輸出:5. 注意事項6. 總結080. 使用C語言實現簡單的數據庫操作 在…

2025年目前最新版本Android Studio自定義xml預覽的屏幕分辨率

一、前言 在實際開發項目當中&#xff0c;我們的設備的分辨率可能會比較特殊&#xff0c;AS并沒有自帶這種屏幕分辨率的設備&#xff0c;但是我們又想一邊編寫XML界面&#xff0c;一邊實時看到較為真實的預覽效果&#xff0c;該怎么辦呢&#xff1f;在早期的AS版本中&#xff…

Edge Databases:賦能分布式計算環境

Edge 計算通過將數據處理推向數據源頭徹底改變了傳統計算范式。隨著物聯網設備、移動應用和分布式系統的大規模部署&#xff0c;面向邊緣場景優化的數據庫解決方案已成為關鍵技術需求。這類專用數據庫能夠在算力有限、內存受限且網絡連接不穩定的終端設備上穩定運行&#xff0c…

Pluto論文閱讀筆記

主要還是參考了這一篇論文筆記&#xff1a;https://zhuanlan.zhihu.com/p/18319150220 Pluto主要有三個創新點&#xff1a; 橫向縱向用lane的query來做將軌跡投回柵格化地圖&#xff0c;計算碰撞loss對數據進行正增強和負增強&#xff0c;讓正增強的結果也無增強的結果相近&a…

【計算機網絡】傳輸層UDP協議

&#x1f525;個人主頁&#x1f525;&#xff1a;孤寂大仙V &#x1f308;收錄專欄&#x1f308;&#xff1a;計算機網絡 &#x1f339;往期回顧&#x1f339;&#xff1a; 【計算機網絡】應用層協議Http——構建Http服務服務器 &#x1f516;流水不爭&#xff0c;爭的是滔滔不…

「Java教案」順序結構

課程目標 1&#xff0e;知識目標 能夠正確使用Java順序結構的基本語法&#xff0c;例如變量的聲明、變量的賦值、表達式的計算、數據的輸出。能夠正確使用順序結構的執行規則及其在程序中的作用&#xff0c;解決實際問題。 2&#xff0e;能力目標 能夠獨立完成順序結構程序…

第八部分:階段項目 6:構建 React 前端應用

現在&#xff0c;是時候將你學到的 React 基礎知識付諸實踐&#xff0c;構建一個簡單的前端應用來模擬與后端 API 的交互了。在這個階段&#xff0c;你可以先使用模擬數據&#xff0c;或者如果你的后端 API&#xff08;階段項目 5&#xff09;已經搭建好&#xff0c;可以直接連…

GO語言----基礎類型取別名

文章目錄 取別名示例注意事項 Go語言中使用type關鍵字為基礎類型取別名。 type是Go語言中用于定義新類型的關鍵字&#xff0c;它提供了強大的類型定義能力。 取別名示例 type MyInt int注意事項 這創建了一個新類型MyInt&#xff0c;它底層是int類型&#xff0c;但與int是不同…

服務端定時器的學習(一)

一、定時器 1、定時器是什么&#xff1f; 定時器不僅存在于硬件領域&#xff0c;在軟件層面&#xff08;客戶端、網頁和服務端&#xff09;也普遍應用&#xff0c;核心功能都是高效管理大量延時任務。不同應用場景下&#xff0c;其實現方式和使用方法有所差異。 2、定時器解…

Mac版本Android Studio配置LeetCode插件

第一步&#xff1a;Android Studio里面找到Settings&#xff0c;找到Plugins&#xff0c;在Marketplace里面搜索LeetCode Editor。 第二步&#xff1a;安裝對應插件&#xff0c;并在Tools->LeetCode Plugin頁面輸入帳號和密碼。 理論上&#xff0c;應該就可以使用了。但是&a…

【ISP算法精粹】動手實戰:用 Python 實現 Bayer 圖像的黑電平校正

在數字成像領域&#xff0c;圖像信號處理器&#xff08;ISP&#xff09;如同幕后英雄&#xff0c;默默將傳感器捕獲的原始數據轉化為精美的圖像。而黑電平校正&#xff0c;作為ISP預處理流程中的關鍵一環&#xff0c;直接影響著最終圖像的質量。今天&#xff0c;我們就通過Pyth…

Oracle OCP與MySQL OCP認證如何選?

認證本質與定位差異 Oracle OCP Oracle OCP是Oracle公司推出的旗艦級數據庫專家認證&#xff0c;專注于其核心的閉源商業數據庫技術體系。核心領域包括RAC&#xff08;Real Application Clusters&#xff09;高可用集群、Data Guard容災解決方案、Exadata數據庫一體機集成以及…

MVVM、MVC的區別、什么是MVVM

一、什么是MVVM &#xff08;一&#xff09;定義 MVVM是Model - View - ViewModel的縮寫&#xff0c;它是一種軟件架構設計模式&#xff0c;主要用于構建用戶界面。這種模式將應用程序分為三個主要部分&#xff1a; Model&#xff08;模型層&#xff09; 它是應用程序中負責…