1. 程式人生 > >python中的is、==和cmp()比較字串

python中的is、==和cmp()比較字串

python 中的is、==和cmp(),比較字串

經常寫 shell 指令碼知道,字串判斷可以用 =,!= 數字的判斷是 -eq,-ne 等,但是 Python 確不是這樣子地。
所以作為慢慢要轉換到用 Python 寫指令碼,這些基本的東西必須要掌握到骨子裡!

在 Python 中比較字串最好是使用簡單邏輯操作符。
例如,確定一個字串是否和另外一個字串匹配。正確的,你可以使用 is equal 或 == 操作符。你也可以使用例如 >= 或 < 來確定幾個字串的排列順序。

從官方文件上看

1 2 3 4 5 6 7 8 The operators ``is`` and
``is not`` test for object identity: ``x is y`` is true if and only if *x* and *y* are the same object.  ``x is not y`` yields the inverse truth value. cmp(...) cmp(x, y) -> integer Return negative if x<y, zero if x==y, positive if x>y.
1 2 3 4 5 6 7 8 9 10 11 12 >>> a
= 256 >>> b = 256 >>> id(a) 9987148 >>> id(b) 9987148 >>> a = 257 >>> b = 257 >>> id(a) 11662816 >>> id(b) 11662828

為什麼兩次 is 返回的是不同結果?不是應該都是 true 嗎?
因為 string pooling (或叫intern)。 is 相等代表兩個物件的 id 相同(從底層來看的話,可以看作引用同一塊記憶體區域)。 至於為什麼 “ABC” 被 intern 了而 “a bc” 沒有,這是 Python 解析器實現決定的,可能會變。

== 用來判斷兩個物件的值是否相等(跟 Java 不同,Java 中 == 用來判斷是否是同一個物件)。
今天我用 == 來判斷兩個 IP 地址 字串是否相同。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #!/usr/bin/python strtmp = '192.169.1.161' file_object = open(r'public_ip.txt') try: all_the_text = file_object.readlines() firstline = all_the_text[0].rstrip() finally: file_object.close() #print firstline #if strtmp == firstline: s = (strtmp is firstline) print s if (strtmp is firstline): print 'yes' else: print 'no'

來個簡單點的例子:

1 2 3 4 5 6 7 8 9 #-*-conding:utf-8-*- i='xinwen'; m=input(); if i==m: print('yes'); else: print('no'); input();

在 if 判斷語句中非常有用吶!

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #!/usr/bin/python # Filename: if.py number = 23 guess = int(raw_input('Enter an integer : ')) if guess == number: print 'Congratulations, you guessed it.' # New block starts here print "(but you do not win any prizes!)" # New block ends here elif guess < number: print 'No, it is a little higher than that' # Another block # You can do whatever you want in a block ... else: print 'No, it is a little lower than that' # you must have guess > number to reach here print 'Done' # This last statement is always executed, after the if statement is executed

cmp() 函式則是相當於 <,==,> 但是在 Python3 中,cmp() 函式被移除了,所以我以後還是避免少用這個函式。

1 2 3 4 5 6 7 8 9 10 11 12 >>> x='a' >>> x+'b' is 'ab' False >>> x+'b' == 'ab' True >>> cmp(x+'b','ab') 0 >>> id(x+'b') 32468384L >>> id('ab') 46933696L >>>

注意:

1 2 3 4 5 6 7 >>> a='abc' >>> b='abc' >>> a is b True >>> id(a) == id(b) True >>>

可以看出內容相同的字串實際上是同一個物件(Java 中直接賦值的字串也可用 == 來判斷,但是使用 new 例項化的物件則需要使用equals(String s) 來判斷)。

相關推薦

pythonis==cmp()比較字串

python 中的is、==和cmp(),比較字串 經常寫 shell 指令碼知道,字串判斷可以用 =,!= 數字的判斷是 -eq,-ne 等,但是 Python 確不是這樣子地。所以作為慢慢要轉換到用 Python 寫指令碼,這些基本的東西必須要掌握到骨子裡! 在 Python 中比較字串最好是使用簡單邏輯

pythonis==運算子比較

is是判斷兩個變數是否引用同一個物件,即比較物件的地址; ==則是判斷兩個引用變數或者引用物件的值是否相等,預設呼叫物件的_eq_()方法; 舉例,當直接在IDLE中執行如下程式碼時,結果如下:      同樣的程式碼不同的結果,原

Python is == 區別

Python is和== Python中is和==的區別,如下: 環境實在IPython做的測試 在Python中 is是一個對象標識符(object identity ),== 表示相(equality);is 是通過對象所指向的內存地址是否相等來進行判斷== 則是通過調用方法 eq判斷兩邊的對象是

Pythonis==的區別

int 要素 com 分別是 htm python get 參考資料 元組類型 Python中有很多運算符,今天我們就來講講is和==兩種運算符在應用上的本質區別是什麽。 在講is和==這兩種運算符區別之前,首先要知道Python中對象包含的三個基本要素,分別是:id(身份

JavaPythonfor循環的比較

Java和Python中for循環的比較Java是強類型的語言,而python是弱類型的語言。先看Java中的for循環使用,如下圖: package test06; /* * for 循環的條件 * for (循環初始表達式;循環條件表達式;循環後的表達式) */ public class Fort

python@staticmethod@classmethod實例方法

dir pri cep ear 代碼 應用 can 打印 靜態 1.形式上的異同點: 在形式上,Python中:實例方法必須有self,類方法用@classmethod裝飾必須有cls,靜態方法用@staticmethod裝飾不必加cls或self,如下代碼所示: 1

pythonreadabilityDocumenthtml2text的使用

今天在處理html資料的時候發現了python裡面比較好玩的幾個庫,先存起來之後有時間慢慢再去學習和使用,覺得是一件蠻有意思的事情。今天想學習使用的是html2text模組和readability模組。其中,第一個模組是負責對html資料進行處理的,返回html中的文字資訊;第二個模組是負責html

pythonis==操作符

在以前的面試中,有一次被問到is的用法,當場懵逼,今天有空整理了一下這2個運算子的簡單用法:   ==運算子:測試兩個被引用物件是否有相同的值 l = [1, 2, 3] m = l[:] print m == l True   is 運算子:檢查物件的同

pythonhasattrgetattrsetattr的使用方法

hasattr(object, name)判斷一個物件裡面是否有name屬性或者name方法,返回BOOL值,有name特性返回True, 否則返回False。需要注意的是name要用括號括起來 1 >>> class test(): 2 ...

Python 3.6reduce函式cmp函式

1,Python 3中取消了cmp函式,使用cmp功能的話需按如下所示(方法一種): import operator #help(operator) ... __ge__ = ge(...) ge(a, b) -- Same as a>=b. __eq__ = eq(...

pythonsocket程序執行緒協程池的建立方式應用場景

程序 場景 利用多核、高計算型的程式、啟動數量有限 程序是計算機中最小的資源分配單位 程序和執行緒是包含關係 每個程序中都至少有一條執行緒 可以利用多核,資料隔離

Pythonis==的區別(面試題)

面試的時候,當問到 is 和 == 的區別時,有很多同學對這個問題不是很清楚,有的人理解但是表述不清楚,接下來我們通過本文對這個做一個深刻的理解。 我們來看一個例子: 我們可以從上面看出,有的is和==相同,而有的不同呢?我們先看看官方文件裡面怎麼解釋這兩者之間的區別: 官方文件中說 is

Python is同一性運算子==相等運算子區別

Python中有很多運算子,今天我們就來講講is和==兩種運算子在應用上的本質區別是什麼。 在講is和==這兩種運算子區別之前,首先要知道Python中物件包含的三個基本要素,分別是:id(身份標識)、python type()(資料型別)和value(值)。is和==都是

python引數解包變數

這是學習python的第10課,主要學習了另外一種將變數傳遞給指令碼的方法,也就是用  argv  來傳遞變數。 from sys import argv #read the WYSS section for how to run this script,first,s

pythonis判斷比較地址

m = id(input()) n = id(True) print(m,n) print(m is True) if(m): print('True') else: print('Fa

python andor &|

and: 表示式a and表示式 b: 表示式a 如果是真,那麼就返回表示式 b 表示式a 如果為假,那麼就返回表示式 a or: 表示式 a or 表示式 b: 表示式 a如果為真,那麼就返回表示式 a 表示式 a如果為假,那麼就返回表示式 b &:標示與運算 1&

python 的%s%rstr.format()函式

%r是repr %s就是str >>> print '%r' % 'a' 'a' >>> print '%s' % 'a' a >>> class

Pythonread()readline()readlines()三者間的區別用法

前言 眾所周知在python中讀取檔案常用的三種方法:read(),readline(),readlines(),今天看專案是又忘記他們的區別了。以前看書的時候覺得這東西很簡單,一眼掃過,待到用時卻也只知道有這麼幾個方法,不懂得它的原理與用法。也許吧,沒有永遠的記憶,況且根

python封裝繼承多型——python學習筆記

1. 準備 封裝、繼承和多型在程式語言中專指面向物件程式設計的特性,下面先給出一個python中建立類的例子: class Student(object): def __init__(self, name, score): self.name = name

python的同步非同步阻塞非阻塞

同步與非同步 同步和非同步關注的是訊息通訊機制. 同步非同步指的是呼叫者與被呼叫者兩者之間的關係,而不是經常容易誤解的多個被呼叫者之間的關係。 同步 所謂同步,就是在發出一個功能呼叫時,在沒有得到結果之前,該呼叫就不會返回,一旦呼叫返回,就得到返回值了。 換句話說,