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) 來判斷)。
相關推薦
python中的is、==和cmp()比較字串
python 中的is、==和cmp(),比較字串 經常寫 shell 指令碼知道,字串判斷可以用 =,!= 數字的判斷是 -eq,-ne 等,但是 Python 確不是這樣子地。所以作為慢慢要轉換到用 Python 寫指令碼,這些基本的東西必須要掌握到骨子裡! 在 Python 中比較字串最好是使用簡單邏輯
python中is和==運算子比較
is是判斷兩個變數是否引用同一個物件,即比較物件的地址; ==則是判斷兩個引用變數或者引用物件的值是否相等,預設呼叫物件的_eq_()方法; 舉例,當直接在IDLE中執行如下程式碼時,結果如下: 同樣的程式碼不同的結果,原
Python中 is 和 == 區別
Python is和== Python中is和==的區別,如下: 環境實在IPython做的測試 在Python中 is是一個對象標識符(object identity ),== 表示相(equality);is 是通過對象所指向的內存地址是否相等來進行判斷== 則是通過調用方法 eq判斷兩邊的對象是
Python中is和==的區別
int 要素 com 分別是 htm python get 參考資料 元組類型 Python中有很多運算符,今天我們就來講講is和==兩種運算符在應用上的本質區別是什麽。 在講is和==這兩種運算符區別之前,首先要知道Python中對象包含的三個基本要素,分別是:id(身份
Java和Python中for循環的比較
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
python中readability、Document和html2text的使用
今天在處理html資料的時候發現了python裡面比較好玩的幾個庫,先存起來之後有時間慢慢再去學習和使用,覺得是一件蠻有意思的事情。今天想學習使用的是html2text模組和readability模組。其中,第一個模組是負責對html資料進行處理的,返回html中的文字資訊;第二個模組是負責html
python中is和==操作符
在以前的面試中,有一次被問到is的用法,當場懵逼,今天有空整理了一下這2個運算子的簡單用法: ==運算子:測試兩個被引用物件是否有相同的值 l = [1, 2, 3] m = l[:] print m == l True is 運算子:檢查物件的同
python中hasattr、getattr和setattr的使用方法
hasattr(object, name)判斷一個物件裡面是否有name屬性或者name方法,返回BOOL值,有name特性返回True, 否則返回False。需要注意的是name要用括號括起來 1 >>> class test(): 2 ...
Python 3.6中reduce函式和cmp函式
1,Python 3中取消了cmp函式,使用cmp功能的話需按如下所示(方法一種): import operator #help(operator) ... __ge__ = ge(...) ge(a, b) -- Same as a>=b. __eq__ = eq(...
python中socket、程序、執行緒、協程、池的建立方式和應用場景
程序 場景 利用多核、高計算型的程式、啟動數量有限 程序是計算機中最小的資源分配單位 程序和執行緒是包含關係 每個程序中都至少有一條執行緒 可以利用多核,資料隔離
Python中is和==的區別(面試題)
面試的時候,當問到 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
python中is判斷比較地址
m = id(input()) n = id(True) print(m,n) print(m is True) if(m): print('True') else: print('Fa
python中 and、or和 &|
and: 表示式a and表示式 b: 表示式a 如果是真,那麼就返回表示式 b 表示式a 如果為假,那麼就返回表示式 a or: 表示式 a or 表示式 b: 表示式 a如果為真,那麼就返回表示式 a 表示式 a如果為假,那麼就返回表示式 b &:標示與運算 1&
python 中的%s和%r、str.format()函式
%r是repr %s就是str >>> print '%r' % 'a' 'a' >>> print '%s' % 'a' a >>> class
Python中read()、readline()和readlines()三者間的區別和用法
前言 眾所周知在python中讀取檔案常用的三種方法:read(),readline(),readlines(),今天看專案是又忘記他們的區別了。以前看書的時候覺得這東西很簡單,一眼掃過,待到用時卻也只知道有這麼幾個方法,不懂得它的原理與用法。也許吧,沒有永遠的記憶,況且根
python中封裝、繼承和多型——python學習筆記
1. 準備 封裝、繼承和多型在程式語言中專指面向物件程式設計的特性,下面先給出一個python中建立類的例子: class Student(object): def __init__(self, name, score): self.name = name
python中的同步和非同步、阻塞和非阻塞
同步與非同步 同步和非同步關注的是訊息通訊機制. 同步非同步指的是呼叫者與被呼叫者兩者之間的關係,而不是經常容易誤解的多個被呼叫者之間的關係。 同步 所謂同步,就是在發出一個功能呼叫時,在沒有得到結果之前,該呼叫就不會返回,一旦呼叫返回,就得到返回值了。 換句話說,