国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

python 如何比較字符串是否一樣

瀏覽:2日期:2022-06-17 16:29:51

在python中,判斷兩個(gè)變量是否相等或一樣,可以使用==或者is來(lái)判斷;判斷不一樣可以使用 is not。

示例

python 如何比較字符串是否一樣

使用注意事項(xiàng)1.有時(shí)候兩個(gè)字符串打印出來(lái)看著一樣,但是判斷卻是False?

如果兩個(gè)字符串末尾有其他符號(hào),比如回車‘n’,print的時(shí)候無(wú)法發(fā)現(xiàn)的,所以需要strip:

a=a.strip()b=b.strip()if a==b:print 'True'2.有時(shí)候==判斷是 True ,is 判斷卻是 False?

這是因?yàn)閮蓚€(gè)字符串來(lái)自不同的內(nèi)存塊,內(nèi)存地址不一樣

id() 函數(shù)用于獲取對(duì)象的內(nèi)存地址。

(ob1 is ob2) 等價(jià)于 (id(ob1) == id(ob2)) id函數(shù)可以獲得對(duì)象的內(nèi)存地址,如果兩個(gè)對(duì)象的內(nèi)存地址是一樣的,那么這兩個(gè)對(duì)象肯定是一個(gè)對(duì)象。和is是等價(jià)的.

python 如何比較字符串是否一樣

3.還有一種情況是兩個(gè)對(duì)象用is判斷是False,用id判斷卻是True。

原理比較復(fù)雜,如下:

In [1]: def bar(self, x):...: return self.x + y...: In [2]: class Foo(object):...: x = 9...: def __init__(self ,x):...: self.x = x...: bar = bar...: In [3]: foo = Foo(5)In [4]: foo.bar is Foo.barOut[4]: FalseIn [5]: id(foo.bar) == id(Foo.bar)Out[5]: True

真實(shí)情況是當(dāng)執(zhí)行.操作符的時(shí)候,實(shí)際是生成了一個(gè)proxy對(duì)象,foo.bar is Foo.bar的時(shí)候,兩個(gè)對(duì)象順序生成,放在棧里相比較,由于地址不同肯定是False,但是id(foo.bar) ==id(Foo.bar)的時(shí)候就不同了,首先生成foo.bar,然后計(jì)算foo.bar的地址,計(jì)算完之后foo.bar的地址之后,就沒(méi)有任何對(duì)象指向foo.bar了,所以foo.bar對(duì)象就會(huì)被釋放。然后生成Foo.bar對(duì)象,由于foo.bar和Foo.bar所占用的內(nèi)存大小是一樣的,所以又恰好重用了原先f(wàn)oo.bar的內(nèi)存地址,所以id(foo.bar) == id(Foo.bar)的結(jié)果是True。

下面內(nèi)容由郵件Leo Jay大牛提供,他解釋的更加通透。

用id(expression a) == id(expression b)來(lái)判斷兩個(gè)表達(dá)式的結(jié)果是不是同一個(gè)對(duì)象的想法是有問(wèn)題的。

foo.bar 這種形式叫 attribute reference [1],它是表達(dá)式的一種。foo是一個(gè)instance object,bar是一個(gè)方法,這個(gè)時(shí)候表達(dá)式foo.bar返回的結(jié)果叫method object [2]。

根據(jù)文檔:

When an instance attribute is referenced that isn’t a data attribute, its class is searched. If the name denotes a valid class attribute that is a function object, a method object is created by packing (pointers to) the instance object and the function object just found together in an abstract object: this is the method object.

foo.bar本身并不是簡(jiǎn)單的名字,而是表達(dá)式的計(jì)算結(jié)果,是一個(gè) method object,在id(foo.bar)這樣的表達(dá)式里,method object只是一個(gè)臨時(shí)的中間變量而已,對(duì)臨時(shí)的中間變量做id是沒(méi)有意義的。

一個(gè)更明顯的例子是,

print id(foo.bar) == id(foo.__init__) 輸出的結(jié)果也是True

看 id 的文檔[3]:

Return the “identity” of an object. This is an integer (or long integer) which is guaranteed to be unique and constant for this object during its lifetime. Two objects with non-overlapping lifetimes may have the same id() value. CPython implementation detail: This is the address of the object in memory.

只有你能保證對(duì)象不會(huì)被銷毀的前提下,你才能用 id 來(lái)比較兩個(gè)對(duì)象。所以,如果你非要比的話,得這樣寫(xiě):

fb = foo.bar Fb = Foo.bar print id(fb) == id(Fb)

即把兩個(gè)表達(dá)式的結(jié)果綁定到名字上,再來(lái)比是不是同一個(gè)對(duì)象,你才能得到正確的結(jié)果。

is表達(dá)式 [4] 也是一樣的,你現(xiàn)在得到了正確的結(jié)果,完全是因?yàn)?CPython 現(xiàn)在的實(shí)現(xiàn)細(xì)節(jié)決定的。

現(xiàn)在的is的實(shí)現(xiàn),是左右兩邊的對(duì)象都計(jì)算出來(lái),然后再比較這兩個(gè)對(duì)象的地址是否一樣。

萬(wàn)一哪天改成了,先算左邊,保存地址,把左邊釋放掉,再算右邊,再比較的話,你的is的結(jié)果可能就錯(cuò)了。

官方文檔里也提到了這個(gè)問(wèn)題 [5]。

我認(rèn)為正確的方法也是像id那樣,先把左右兩邊都計(jì)算下來(lái),并顯式綁定到各自的名字上,然后再用is判斷。

python字符串判斷相等總結(jié)判斷字符串相等使用==,不使用is和cmp()函數(shù)

cmp() 函數(shù)則是相當(dāng)于 <,==,> 但是在 Python3 中,cmp() 函數(shù)被移除了,所以我以后還是避免少用這個(gè)函數(shù)。

#-*-conding:utf-8-*-i=’新聞’;m=input();if i==m: print(’yes’);else: print(’no’); input();

if second_company_name == u’中外運(yùn)長(zhǎng)航’ or second_company_name == u’長(zhǎng)航集團(tuán)’:print(u’忽略中外運(yùn)長(zhǎng)航和長(zhǎng)航集團(tuán)的子公司’)continue

在 if 判斷語(yǔ)句中非常有用吶!

#!/usr/bin/python# Filename: if.py number = 23guess = 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 hereelif 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```## strip 去掉字符串其他符號(hào)str1 = str1.strip() #去掉字符串中其他符號(hào)包括換行符等等str2 = str2.strip()if str2 == str1: ... #自己的代碼## == 與 is的區(qū)別

python中,使用==來(lái)比較兩個(gè)**對(duì)象的值**是否相等,而java 則使用== 比較兩個(gè)**對(duì)象**是否是同一對(duì)象

譬如,java中比較字符串,一般使用equal 方法,來(lái)比較兩個(gè)對(duì)象的值是否相等,而不使用==

相比較的,python 使用**is** 來(lái)比較兩個(gè)對(duì)象是否是同一對(duì)象。

is 用來(lái)判斷是否是同一個(gè)對(duì)象,is 是種很特殊的語(yǔ)法,你在其它的語(yǔ)言應(yīng)該不會(huì)見(jiàn)到這樣的用法。

官方文檔解釋:

```pythonThe operators ``is`` and ``is not`` test for object identity: ``x isy`` is true if and only if *x* and *y* are the same object. ``x isnot y`` yields the inverse truth value. cmp(...) cmp(x, y) -> integer Return negative if x<y, zero if x==y, positive if x>y.注意:內(nèi)容相同的字符串實(shí)際上是同一個(gè)對(duì)象

>>> a=’abc’>>> b=’abc’>>> a is bTrue>>> id(a) == id(b)True>>>>```(Java 中直接賦值的字符串也可用 == 來(lái)判斷,但是使用 new 實(shí)例化的對(duì)象則需要使用equals(String s) 來(lái)判斷)## 判斷數(shù)字相等不要用 is 操作符```python>>> a = 256>>> b = 256>>> id(a)9987148>>> id(b)9987148>>> a = 257>>> b = 257>>> id(a)11662816>>> id(b)11662828

為什么兩次 is 返回的是不同結(jié)果?不是應(yīng)該都是 true 嗎?

因?yàn)?string pooling (或叫intern)。 is 相等代表兩個(gè)對(duì)象的 id 相同(從底層來(lái)看的話,可以看作引用同一塊內(nèi)存區(qū)域)。 至于為什么 “ABC” 被 intern 了而 “a bc” 沒(méi)有,這是 Python 解析器實(shí)現(xiàn)決定的,可能會(huì)變。

== 用來(lái)判斷兩個(gè)對(duì)象的值是否相等(跟 Java 不同,Java 中 == 用來(lái)判斷是否是同一個(gè)對(duì)象)。

今天我用 == 來(lái)判斷兩個(gè) IP 地址 字符串是否相同。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 国产高清视频免费最新在线 | 国产精品久久久久9999小说 | 国产一区二区播放 | 国产精品揄拍一区二区久久 | 91亚洲精品在看在线观看高清 | 91亚洲精品久久91 | 久久影院视频 | 第四色成人网 | 狠狠综合久久久久综合小说网 | 久久在线影院 | 亚洲精品一区二区三区四区手机版 | a久久99精品久久久久久不 | 日本一区二区三区欧美在线观看 | 免费精品99久久国产综合精品 | 婷婷国产成人久久精品激情 | 国产成人cao在线 | 国产黄色自拍 | 鲁大师成人精品视频 | 欧美一区视频 | 99久久精品免费看国产四区 | 国产精品久久久久久久久岛 | 免费精品国产日韩热久久 | 日本高清不卡在线观看 | 国产偷国产偷亚洲高清午夜 | 成人免费一级片 | 人成精品视频三区二区一区 | aaa免费看| 毛片三级 | 国产成人免费高清视频网址 | 中文字幕亚洲不卡在线亚瑟 | 久久精品视频1 | 三级毛片免费看 | 久久er精品视频 | 国产日产欧美a级毛片 | 好男人天堂网 | 欧美日韩色 | 国产理论最新国产精品视频 | 偷偷操不一样的久久 | 久久黄色精品视频 | 国产精品中文 | 亚洲男人的天堂久久香蕉 |