最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2021年06月02日 11:20:38   作者:mxiawang  
這篇文章主要介紹了python 如何比較字符串是否一樣的操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

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

示例

在這里插入圖片描述

使用注意事項(xiàng)

1.有時(shí)候兩個(gè)字符串打印出來看著一樣,但是判斷卻是False?

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

a=a.strip()
b=b.strip()
if a==b:
	print "True"

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對象就會(huì)被釋放。然后生成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)來判斷兩個(gè)表達(dá)式的結(jié)果是不是同一個(gè)對象的想法是有問題的。

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

一個(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.

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

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

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

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

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

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

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

我認(rèn)為正確的方法也是像id那樣,先把左右兩邊都計(jì)算下來,并顯式綁定到各自的名字上,然后再用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)長航' or second_company_name == u'長航集團(tuán)':
                print(u'忽略中外運(yùn)長航和長航集團(tuán)的子公司')
                continue

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

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

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

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

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

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

官方文檔解釋:

```python
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.

注意:內(nèi)容相同的字符串實(shí)際上是同一個(gè)對象

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

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

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

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

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • python如何用pyecharts制作詞云圖

    python如何用pyecharts制作詞云圖

    大家好,本篇文章主要講的是python如何用pyecharts制作詞云圖,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • 如何利用Playwright庫進(jìn)行電影網(wǎng)站數(shù)據(jù)的獲取

    如何利用Playwright庫進(jìn)行電影網(wǎng)站數(shù)據(jù)的獲取

    playwright庫是微軟開源的一個(gè)庫,這個(gè)庫的功能更加的強(qiáng)大,除了可以實(shí)現(xiàn)同步操作,同樣也可以實(shí)現(xiàn)異步的操作,這篇文章主要介紹了如何利用Playwright庫進(jìn)行電影網(wǎng)站數(shù)據(jù)的獲取,需要的朋友可以參考下
    2023-05-05
  • Python標(biāo)準(zhǔn)庫os常用函數(shù)和屬性詳解

    Python標(biāo)準(zhǔn)庫os常用函數(shù)和屬性詳解

    os模塊是Python標(biāo)準(zhǔn)庫中的一個(gè)用于訪問操作系統(tǒng)相關(guān)功能的模塊,os模塊提供了一種可移植的使用操作系統(tǒng)功能的方法,本文給大家介紹下?OS標(biāo)準(zhǔn)庫常用函數(shù)和屬性,感興趣的朋友跟隨小編一起看看吧
    2022-11-11
  • 弄清Pytorch顯存的分配機(jī)制

    弄清Pytorch顯存的分配機(jī)制

    這篇文章主要介紹了Pytorch顯存的分配機(jī)制的相關(guān)資料,幫助大家更好的理解和使用Pytorch,感興趣的朋友可以了解下
    2020-12-12
  • Python學(xué)習(xí)之configparser模塊的使用詳解

    Python學(xué)習(xí)之configparser模塊的使用詳解

    ConfigParser是用來讀取配置文件的包。這篇文章主要通過一些簡單的實(shí)例帶大家了解一下ConfigParser模塊的具體使用,感興趣的小伙伴跟隨小編一起了解一下
    2023-01-01
  • 在Python中獲取操作系統(tǒng)的進(jìn)程信息

    在Python中獲取操作系統(tǒng)的進(jìn)程信息

    今天小編就為大家分享一篇在Python中獲取操作系統(tǒng)的進(jìn)程信息,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • Django學(xué)習(xí)教程之靜態(tài)文件的調(diào)用詳解

    Django學(xué)習(xí)教程之靜態(tài)文件的調(diào)用詳解

    這篇文章主要給大家介紹了關(guān)于Django學(xué)習(xí)教程之靜態(tài)文件調(diào)用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用django具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-05-05
  • 深入分析python中整型不會(huì)溢出問題

    深入分析python中整型不會(huì)溢出問題

    本文給大家通過實(shí)例和原理深入分析了python中整型不會(huì)溢出的相關(guān)知識(shí)點(diǎn),有興趣的朋友可以跟著學(xué)習(xí)下。
    2018-06-06
  • 在?Python?中讀取?gzip?文件的過程解析

    在?Python?中讀取?gzip?文件的過程解析

    這篇文章主要介紹了在?Python?中讀取?gzip?文件,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-05-05
  • Python yield的使用詳解

    Python yield的使用詳解

    您可能聽說過,帶有 yield 的函數(shù)在 Python 中被稱之為、generator(生成器),何謂 generator ?我們先拋開 generator,以一個(gè)常見的編程題目來展示 yield 的概念
    2021-10-10

最新評論

祁连县| 昆山市| 大丰市| 紫阳县| 香港| 伊春市| 乐业县| 新乡市| 富顺县| 乐平市| 克东县| 延庆县| 中卫市| 新昌县| 庆阳市| 博罗县| 军事| 宝丰县| 辉县市| 宿迁市| 深泽县| 崇义县| 库尔勒市| 新蔡县| 昭通市| 神木县| 泰州市| 南投县| 巴楚县| 凌海市| 乌审旗| 沙田区| 鱼台县| 高要市| 金乡县| 彩票| 米易县| 科技| 边坝县| 郧西县| 阳西县|