电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

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

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

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

示例

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

使用注意事項1.有時候兩個字符串打印出來看著一樣,但是判斷卻是False?

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

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

這是因為兩個字符串來自不同的內(nèi)存塊,內(nèi)存地址不一樣

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

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

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

3.還有一種情況是兩個對象用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

真實情況是當(dāng)執(zhí)行.操作符的時候,實際是生成了一個proxy對象,foo.bar is Foo.bar的時候,兩個對象順序生成,放在棧里相比較,由于地址不同肯定是False,但是id(foo.bar) ==id(Foo.bar)的時候就不同了,首先生成foo.bar,然后計算foo.bar的地址,計算完之后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。

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

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

foo.bar 這種形式叫 attribute reference [1],它是表達(dá)式的一種。foo是一個instance object,bar是一個方法,這個時候表達(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本身并不是簡單的名字,而是表達(dá)式的計算結(jié)果,是一個 method object,在id(foo.bar)這樣的表達(dá)式里,method object只是一個臨時的中間變量而已,對臨時的中間變量做id是沒有意義的。

一個更明顯的例子是,

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.

只有你能保證對象不會被銷毀的前提下,你才能用 id 來比較兩個對象。所以,如果你非要比的話,得這樣寫:

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

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

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

現(xiàn)在的is的實現(xiàn),是左右兩邊的對象都計算出來,然后再比較這兩個對象的地址是否一樣。

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

官方文檔里也提到了這個問題 [5]。

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

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

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

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

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

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

#!/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 去掉字符串其他符號str1 = str1.strip() #去掉字符串中其他符號包括換行符等等str2 = str2.strip()if str2 == str1: ... #自己的代碼## == 與 is的區(qū)別

python中,使用==來比較兩個**對象的值**是否相等,而java 則使用== 比較兩個**對象**是否是同一對象

譬如,java中比較字符串,一般使用equal 方法,來比較兩個對象的值是否相等,而不使用==

相比較的,python 使用**is** 來比較兩個對象是否是同一對象。

is 用來判斷是否是同一個對象,is 是種很特殊的語法,你在其它的語言應(yīng)該不會見到這樣的用法。

官方文檔解釋:

```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)容相同的字符串實際上是同一個對象

>>> a=’abc’>>> b=’abc’>>> a is bTrue>>> id(a) == id(b)True>>>>```(Java 中直接賦值的字符串也可用 == 來判斷,但是使用 new 實例化的對象則需要使用equals(String s) 來判斷)## 判斷數(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 嗎?

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

== 用來判斷兩個對象的值是否相等(跟 Java 不同,Java 中 == 用來判斷是否是同一個對象)。

今天我用 == 來判斷兩個 IP 地址 字符串是否相同。

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

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 中开泵,中开泵厂家,双吸中开泵-山东博二泵业有限公司 | 山东PE给水管厂家,山东双壁波纹管,山东钢带增强波纹管,山东PE穿线管,山东PE农田灌溉管,山东MPP电力保护套管-山东德诺塑业有限公司 | 【灵硕展览集团】展台展会设计_展览会展台搭建_展览展示设计一站式服务公司 | 广州网站建设_小程序开发_番禺网站建设_佛山网站建设_粤联网络 | 翰墨AI智能写作助手官网_人工智能问答在线AI写作免费一键生成 | 山东齐鲁漆业有限公司【官网】-工业漆专业生产厂家 | 西安微信朋友圈广告投放_微信朋友圈推广_西安度娘网络科技有限公司 | 天坛家具官网| 开云(中国)Kaiyun·官方网站 - 登录入口 | 自进式锚杆-自钻式中空注浆锚杆-洛阳恒诺锚固锚杆生产厂家 | 百方网-百方电气网,电工电气行业专业的B2B电子商务平台 | 合肥弱电工程_安徽安防工程_智能化工程公司-合肥雷润 | 隆众资讯-首页_大宗商品资讯_价格走势_市场行情 | 防弹玻璃厂家_防爆炸玻璃_电磁屏蔽玻璃-四川大硅特玻科技有限公司 | 精密五金冲压件_深圳五金冲压厂_钣金加工厂_五金模具加工-诚瑞丰科技股份有限公司 | 聚天冬氨酸,亚氨基二琥珀酸四钠,PASP,IDS - 远联化工 | 手表腕表维修保养鉴定售后服务中心网点 - 名表维修保养 | 气动机械手-搬运机械手-气动助力机械手-山东精瑞自动化设备有限公司 | 通风气楼_通风天窗_屋顶风机-山东美创通风设备有限公司 | 彭世修脚_修脚加盟_彭世修脚加盟_彭世足疗加盟_足疗加盟连锁_彭世修脚技术培训_彭世足疗 | 茶叶百科网-茶叶知识与茶文化探讨分享平台 | 北京网站建设首页,做网站选【优站网】,专注北京网站建设,北京网站推广,天津网站建设,天津网站推广,小程序,手机APP的开发。 | 皮带式输送机械|链板式输送机|不锈钢输送机|网带输送机械设备——青岛鸿儒机械有限公司 | 防弹玻璃厂家_防爆炸玻璃_电磁屏蔽玻璃-四川大硅特玻科技有限公司 | 智慧养老_居家养老_社区养老_杰佳通 | 阜阳成人高考_阜阳成考报名时间_安徽省成人高考网 | 深圳货架厂_仓库货架公司_重型仓储货架_线棒货架批发-深圳市诺普泰仓储设备有限公司 | 赛尔特智能移动阳光房-阳光房厂家-赛尔特建筑科技(广东)有限公司 | 污水处理设备维修_污水处理工程改造_机械格栅_过滤设备_气浮设备_刮吸泥机_污泥浓缩罐_污水处理设备_污水处理工程-北京龙泉新禹科技有限公司 | 黑龙江「京科脑康」医院-哈尔滨失眠医院_哈尔滨治疗抑郁症医院_哈尔滨精神心理医院 | 厚壁钢管-厚壁无缝钢管-小口径厚壁钢管-大口径厚壁钢管 - 聊城宽达钢管有限公司 | 附着力促进剂-尼龙处理剂-PP处理剂-金属附着力处理剂-东莞市炅盛塑胶科技有限公司 | 济南办公室装修-厂房装修-商铺装修-工装公司-山东鲁工装饰设计 | 螺杆式冷水机-低温冷水机厂家-冷冻机-风冷式-水冷式冷水机-上海祝松机械有限公司 | 防渗土工膜|污水处理防渗膜|垃圾填埋场防渗膜-泰安佳路通工程材料有限公司 | 上海办公室装修,办公楼装修设计,办公空间设计,企业展厅设计_写艺装饰公司 | 烟雾净化器-滤筒除尘器-防爆除尘器-除尘器厂家-东莞执信环保科技有限公司 | 密度电子天平-内校-外校电子天平-沈阳龙腾电子有限公司 | 全自动定氮仪-半自动凯氏定氮仪厂家-祎鸿仪器 | 东莞市海宝机械有限公司-不锈钢分选机-硅胶橡胶-生活垃圾-涡电流-静电-金属-矿石分选机 | Dataforth隔离信号调理模块-信号放大模块-加速度振动传感器-北京康泰电子有限公司 |