創(chuàng)新互聯(lián)www.cdcxhl.cn八線動態(tài)BGP香港云服務(wù)器提供商,新人活動買多久送多久,劃算不套路!
成都創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司是一家服務(wù)多年做網(wǎng)站建設(shè)策劃設(shè)計(jì)制作的公司,為廣大用戶提供了成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè),成都網(wǎng)站設(shè)計(jì),一元廣告,成都做網(wǎng)站選成都創(chuàng)新互聯(lián),貼合企業(yè)需求,高性價(jià)比,滿足客戶不同層次的需求一站式服務(wù)歡迎致電。這篇文章將為大家詳細(xì)講解有關(guān)python比較兩個(gè)字符串是否相等的方法,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
在python中,判斷兩個(gè)字符串是否相等或一樣,可以使用==或者is來判斷;判斷不一樣可以使用 is not。
示例
使用注意事項(xiàng)
1.有時(shí)候兩個(gè)字符串打印出來看著一樣,但是判斷卻是False?如果兩個(gè)字符串末尾有其他符號,比如回車‘\n’,print的時(shí)候無法發(fā)現(xiàn)的,所以需要strip:
2.有時(shí)候==判斷是 True ,is 判斷卻是 False?
這是因?yàn)閮蓚€(gè)字符串來自不同的內(nèi)存塊,內(nèi)存地址不一樣
id() 函數(shù)用于獲取對象的內(nèi)存地址。
(ob1 is ob2) 等價(jià)于 (id(ob1) == id(ob2)) id函數(shù)可以獲得對象的內(nèi)存地址,如果兩個(gè)對象的內(nèi)存地址是一樣的,那么這兩個(gè)對象肯定是一個(gè)對象。和is是等價(jià)的.
3.還有一種情況是兩個(gè)對象用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.bar Out[4]: False In [5]: id(foo.bar) == id(Foo.bar) Out[5]: True
真實(shí)情況是當(dāng)執(zhí)行.操作符的時(shí)候,實(shí)際是生成了一個(gè)proxy對象,foo.bar is Foo.bar的時(shí)候,兩個(gè)對象順序生成,放在棧里相比較,由于地址不同肯定是False,但是id(foo.bar) ==id(Foo.bar)的時(shí)候就不同了,首先生成foo.bar,然后計(jì)算foo.bar的地址,計(jì)算完之后foo.bar的地址之后,就沒有任何對象指向foo.bar了,所以foo.bar對象就會被釋放。然后生成Foo.bar對象,由于foo.bar和Foo.bar所占用的內(nèi)存大小是一樣的,所以又恰好重用了原先foo.bar的內(nèi)存地址,所以id(foo.bar) == id(Foo.bar)的結(jié)果是True。
關(guān)于python比較兩個(gè)字符串是否相等的方法就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。