国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python中is與雙等于號“==”的區別示例詳解

2020-01-04 16:18:57
字體:
來源:轉載
供稿:網友

前言

在開始本文之前,首先要知道Python中對象包含的三個基本要素,分別是:id(身份標識)、python/284370.html">python type()(數據類型)和value(值)。is和==都是對對象進行比較判斷作用的,但對對象比較判斷的內容并不相同。下面來看看具體區別在哪。

發現問題

最近在給小伙伴寫段小代碼用于爬取一個GIS的各高層數據,python中使用了”is”來代替”==”,結果下載至512的時候出了問題。

代碼如下

def get_next(x, y, z): z += 1 if z is 2**x: # 應該用if z == 2**x y += 1 z = 0 if y is 2**(x+1): x += 1 y = 0 return x, y, z

這是用來獲取下一個高層數據的URL的函數,結果第二天,小伙伴告訴我說下載到x == 9, y == 0, z == 512的時候停止下載了。

探索

首先,根據上述代碼可以知道,z按照邏輯是不可能等于512的,所有開始懷疑是不是這個函數有問題,但是這么簡單的函數,怎么看都不應該有問題啊。于是開始跟代碼,發現

if z is 2**x

處,x == 9, y == 0, z == 512時,if后面居然返回的是False。我拿計算器算了好幾遍,確定自己不是在二次元后,開始懷疑is的問題。

結果

在StackOverflow上面找到了答案

Is there a difference between == and is in Python?

is will return True if two variables point to the same object, == if the objects referred to by the variables are equal.

>>> a = [1, 2, 3]>>> b = a>>> b is a True>>> b == aTrue>>> b = a[:]>>> b is aFalse>>> b == aTrue

In your case, the second test only works because Python caches small integer objects, which is an implementation detail. For larger integers, this does not work:

>>> 1000 is 10**3False>>> 1000 == 10**3True

然后自己寫了個小段子看看最大的可復用的int是多大

a = 0b = 0while a is b: a += 1 b += 1

最后發現最大是256。

小結:

  • ==比較操作符:用來比較兩個對象是否相等,value做為判斷因素;
  • is同一性運算符:比較判斷兩個對象是否相同,id做為判斷因素。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到python教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 南宫市| 平江县| 将乐县| 建水县| 太仓市| 莒南县| 涡阳县| 策勒县| 舞钢市| 威信县| 古交市| 无为县| 大荔县| 东乌珠穆沁旗| 万全县| 阜阳市| 五指山市| 高州市| 大化| 建始县| 贵定县| 黔东| 建宁县| 金沙县| 吉林市| 泸水县| 镇平县| 包头市| 桦川县| 广河县| 淮南市| 东乡| 吉林市| 兴和县| 莒南县| 汝城县| 夏邑县| 龙江县| 亳州市| 福州市| 蒙城县|