python等值和大小比較

来源:https://www.cnblogs.com/f-ck-need-u/archive/2018/12/15/10124559.html
-Advertisement-
Play Games

等值、大小比較 在python中, 只要兩個對象的類型相同,且它們是內置類型(字典除外),那麼這兩個對象就能進行比較 。關鍵詞:內置類型、同類型。所以,兩個對象如果類型不同,就沒法比較,比如數值類型的數值不能和字元串類型的數值或字母比較。 對於python中的等值、不等值、大小比較的規則為何如此,以 ...


等值、大小比較

在python中,只要兩個對象的類型相同,且它們是內置類型(字典除外),那麼這兩個對象就能進行比較。關鍵詞:內置類型、同類型。所以,兩個對象如果類型不同,就沒法比較,比如數值類型的數值不能和字元串類型的數值或字母比較。

對於python中的等值、不等值、大小比較的規則為何如此,以後學了Class的運算符重載,自然就會知道。

其實自定義的類型(python 3.x中類Class就是類型)也可以進行比較,只不過要對類的比較操作符進行運算符重載。這些以後再說,這裡先看內置類型的比較。

比較操作符有:

==  !=  <  <=  >  >=

例如,下麵的比較全部返回True。

bool(1 < 2)
bool('a' < 'c')
bool('A' < 'a')    # 字元大小:A < Z < a < z

bool([1,2,2] < [1,2,3])
bool((1,2,2) < (1,2,3))
bool({1,2,2} < {1,2,3})

python中同類型的內置類型對象(字典除外),都是從左開始,一個一個元素向後比較,就算中間遇到嵌套的容器結構(如list/tuple/Set),也會遞歸到嵌套的結構中去一個個比較。

>>> bool([1,2,[3,3]] < [1,2,[3,4]])
True

註意,None對象只能參與等值和不等值比較,不能參與大小比較。

>>> None == None
True
>>> None != None
False
>>> None <= None
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: '<=' not supported between instances of 'NoneType' and 'NoneType'

python支持連續比較,連續比較時等價於使用and運算。例如:

a < b < c    等價於  a < b and b < c
a < b > c    等價於  a < b and b > c
a == b < c   等價於  a == b and b < c

一定要註意連續比較時的邏輯。例如1 == 2 < 3返回False,但它等價於1 == 2 and 2 < 3,而不是先評估1==2得到False,再將比較的結果與後面的做比較,即等價於False < 3,這意味著0<3,這實際上是返回True的。

>>> 1 == 2 < 3
False

>>> (1==2) < 3
True

連續比較是一種比較語法,它不僅限於數值的連續比較,還支持其它類型。比如:

>>> "ac" > "ab" < "ad"
True

is 和 ==

有兩種比較數據對象是否相等的方式:"=="和"is",它們的否定形式分別為"!="和"is not"。

它們都是比較表達式,但卻是完全不同的比較方式:

  • "=="和"!="符號比較的是數據的值是否相等、相同
  • "is"比較的是兩個數據對象在記憶體中是否是同一個數據對象。換句話說,比較的是記憶體地址

等號比較很容易理解,只要值相等就為True,否則為False。

is比較的是記憶體中的數據對象。例如:

>>> a = 1000
>>> b = 1000
>>> a == b
True
>>> a is b
False

a和b在數值上是相等的,所以a == b返回True。但它們分別指向的記憶體中的數據對象1000,卻不是同一個數據對象,所以a is b返回False。如下圖,記憶體中有兩個1000。

如果是下麵這種情況:

>>> a = 1000
>>> b = a
>>> a is b
True

結果中a is b返回True,因為b = a是將a中保存的1000的地址賦值給b,使得b中也保存1000地地址。如下圖,記憶體中只有一個1000,但是a和b都指向這個1000。

is測試還有些特殊情況,另外,關於b = a為什麼賦值的是a中保存的地址,這裡不對此展開描述,在後面的文章會非常詳細地進行解釋。當然,放在後面並不是因為難,而是文章內容安排的先後順序,有需求可以先看看:


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Shiro引入Spring 添加jar包/maven配置 <!-- shiro支持 --> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-core</artifactId> <version>1.2.4</ver ...
  • lua中有兩種閉包, c閉包和lua閉包 兩種閉包的公共部分: C閉包的結構 結構比較簡單, f是一個滿足 int lua_func(lua_State ) 類型的c函數 upvalue是創建C閉包時壓入的upvalue, 類型是TValue, 可以得知, upvalue可以是任意的lua類型 Lu ...
  • Python開髮菜鳥入坑 項目要求pdf轉成圖片,網上較多的方案對於windows極其不友好,wand,Pythonmagick(win下載地址:www.lfd.uci.edu/~gohlke/pythonlibs/#pythonmagick),imagemagick(win下載地址:www.ima ...
  • Inno Setup 系列之安裝、卸載前檢測進程運行情況並關閉相應進程 ...
  • 從頭開始學習OI之Tarjan. 今天重新學習了Tarjan演算法..來這裡寫一下學習筆記...但是我太菜了..還是講不好怎麼辦... ...
  • 給定一個包含 n 個整數的數組 nums,判斷 nums 中是否存在三個元素 a,b,c ,使得 a + b + c = 0 ?找出所有滿足條件且不重覆的三元組。 註意:答案中不可以包含重覆的三元組。 我們先對數組排序,得到如下圖的結果 我們要計算a+b+c=0,先對數組迴圈得到a,然後b就是a的索 ...
  • 題目內容: 這一周的編程題是需要你在課程所給的時鐘程式的基礎上修改而成。但是我們並不直接給你時鐘程式的代碼,請根據視頻自己輸入時鐘程式的Display和Clock類的代碼,然後來做這個題目。 我們需要給時鐘程式加上一個表示秒的Display,然後為Clock增加以下public的成員函數: publ ...
  • 一 在下麵兩種情況下使用靜態方法: 1.當一個方法不需要訪問對象轉態,其所需的參數讀書通過顯示參數提供的(例如 Math.pow). 2.當一個方法只需要訪問類靜態域(enployee.getNextld). 二 方法參數的使用情況 一個方法不能修改一個基本數據類型的參數(即數值型和布爾型). 一個 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...