在工作中遇到一個項目的陳年老bug,如圖:
我們提供的服務(wù)有:網(wǎng)站設(shè)計制作、成都做網(wǎng)站、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、東安ssl等。為上1000+企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學管理、有技術(shù)的東安網(wǎng)站制作公司
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ù),但是因為很少用到,所以很多人并不太清楚。
1、print()函數(shù):打印字符串;
2、raw_input()函數(shù):從用戶鍵盤捕獲字符;
3、len()函數(shù):計算字符長度;
4、format()函數(shù):實現(xiàn)格式化輸出;
5、type()函數(shù):查詢對象的類型;
6、int()函數(shù)、float()函數(shù)、str()函數(shù)等:類型的轉(zhuǎn)化函數(shù);
7、id()函數(shù):獲取對象的內(nèi)存地址;
8、help()函數(shù):Python的幫助函數(shù);
9、s.islower()函數(shù):判斷字符小寫;
10、s.sppace()函數(shù):判斷是否為空格;
11、str.replace()函數(shù):替換字符;
12、import()函數(shù):引進庫;
13、math.sin()函數(shù):sin()函數(shù);
14、math.pow()函數(shù):計算次方函數(shù);
15、os.getcwd()函數(shù):獲取當前工作目錄;
16、listdir()函數(shù):顯示當前目錄下的文件;
17、time.sleep()函數(shù):停止一段時間;
18、random.randint()函數(shù):產(chǎn)生隨機數(shù);
19、range()函數(shù):返回一個列表,打印從1到100;
20、file.read()函數(shù):讀取文件返回字符串;
21、file.readlines()函數(shù):讀取文件返回列表;
22、file.readline()函數(shù):讀取一行文件并返回字符串;
23、split()函數(shù):用什么來間隔字符串;
24、isalnum()函數(shù):判斷是否為有效數(shù)字或字符;
25、isalpha()函數(shù):判斷是否全為字符;
26、isdigit()函數(shù):判斷是否全為數(shù)字;
27、 lower()函數(shù):將數(shù)據(jù)改成小寫;
28、upper()函數(shù):將數(shù)據(jù)改成大寫;
29、startswith(s)函數(shù):判斷字符串是否以s開始的;
30、endwith(s)函數(shù):判斷字符串是否以s結(jié)尾的;
31、file.write()函數(shù):寫入函數(shù);
32、file.writeline()函數(shù):寫入文件;
33、abs()函數(shù):得到某數(shù)的絕對值;
34、file.sort()函數(shù):對書數(shù)據(jù)排序;
35、tuple()函數(shù):創(chuàng)建一個元組;
36、find()函數(shù):查找 返回的是索引;
37、dict()函數(shù):創(chuàng)建字典;
38、clear()函數(shù):清楚字典中的所有項;
39、copy()函數(shù):復(fù)制一個字典,會修改所有的字典;
40、 get()函數(shù):查詢字典中的元素。
…………
用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值。
用于獲取對象的內(nèi)存地址。
我們每一個人都有身份證來證明自己的身份。網(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)該特指復(fù)合類型的對象(如類、list等),對于字符串、整數(shù)等類型,變量的id是隨值的改變而改變的。