十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
用于獲取對象的內(nèi)存地址。
成都創(chuàng)新互聯(lián)公司堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的寧津網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
我們每一個人都有身份證來證明自己的身份。網(wǎng)絡(luò)地址也有,那就是id。
網(wǎng)絡(luò)id可以用來表示計算機屬于哪個網(wǎng)絡(luò)。Python中也有id函數(shù),而Python中每個對象擁有唯一的內(nèi)存id,所以id函數(shù)它主要用于獲取指定對象的內(nèi)存id值,是Python中必不可少的內(nèi)置函數(shù)。Python中id()函數(shù)用于獲取對象的內(nèi)存地址。
id(object)返回的是對象的“身份證號”,唯一且不變,但在不重合的生命周期里,可能會出現(xiàn)相同的id值。此處所說的對象應(yīng)該特指復合類型的對象(如類、list等),對于字符串、整數(shù)等類型,變量的id是隨值的改變而改變的。
用id()函數(shù)當a,b為2的時候id相同,而為2.5的時候不同,這種情況在string字符串的時候也會出現(xiàn),即當很短的a,b賦值很短的字符串的時候,它們的id值相同,而很長的則不會。
id()函數(shù)用于獲取對象的內(nèi)存地址。語法id([object]),返回對象的內(nèi)存地址。對于字符串、整數(shù)等類型,變量的id是隨值的改變而改變的。
id(object)返回的是對象的“身份證號”,唯一且不變,但在不重合的生命周期里,可能會出現(xiàn)相同的id值。
在工作中遇到一個項目的陳年老bug,如圖:
bug原因是這里本應(yīng)該傳idx,結(jié)果傳成了id。
但是這里最有意思的地方來了。
從截圖可以看出,這個id并不是入?yún)?,也沒有定義過,那他直接用怎么不會報參數(shù)未定義的語法錯誤呢?按說函數(shù)應(yīng)該執(zhí)行不了直接報錯,但是實際上整個方法可以執(zhí)行不會報錯。
排查import也沒有import id,也沒有定義全局變量。那么這個id變量沒有在任何地方定義,為什么可以直接使用呢,還不會報語法錯誤?
經(jīng)過查閱資料才發(fā)現(xiàn),id在這里其實 不是一個變量,而是一個函數(shù)!
查看官方文檔可以看到:
所以id()本身是python內(nèi)置的一個函數(shù),但是因為很少用到,所以很多人并不太清楚。
您可以使用Python的內(nèi)置函數(shù)id()來判斷兩個變量是否不同。id()函數(shù)可以返回一個變量的唯一標識符,如果兩個變量的id()函數(shù)返回的值不同,則說明這兩個變量是不同的。例如:
a = 3
b = 4
if id(a) != id(b):
print("a和b是不同的變量")
else:
print("a和b是相同的變量")
因此,您可以使用id()函數(shù)來判斷兩個變量是否不同。