十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
在工作中遇到一个项目的陈年老bug,如图:
我们提供的服务有:网站设计制作、成都做网站、微信公众号开发、网站优化、网站认证、东安ssl等。为上1000+企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的东安网站制作公司
bug原因是这里本应该传idx,结果传成了id。
但是这里最有意思的地方来了。
从截图可以看出,这个id并不是入参,也没有定义过,那他直接用怎么不会报参数未定义的语法错误呢?按说函数应该执行不了直接报错,但是实际上整个方法可以执行不会报错。
排查import也没有import id,也没有定义全局变量。那么这个id变量没有在任何地方定义,为什么可以直接使用呢,还不会报语法错误?
经过查阅资料才发现,id在这里其实 不是一个变量,而是一个函数!
查看官方文档可以看到:
所以id()本身是python内置的一个函数,但是因为很少用到,所以很多人并不太清楚。
1、print()函数:打印字符串;
2、raw_input()函数:从用户键盘捕获字符;
3、len()函数:计算字符长度;
4、format()函数:实现格式化输出;
5、type()函数:查询对象的类型;
6、int()函数、float()函数、str()函数等:类型的转化函数;
7、id()函数:获取对象的内存地址;
8、help()函数:Python的帮助函数;
9、s.islower()函数:判断字符小写;
10、s.sppace()函数:判断是否为空格;
11、str.replace()函数:替换字符;
12、import()函数:引进库;
13、math.sin()函数:sin()函数;
14、math.pow()函数:计算次方函数;
15、os.getcwd()函数:获取当前工作目录;
16、listdir()函数:显示当前目录下的文件;
17、time.sleep()函数:停止一段时间;
18、random.randint()函数:产生随机数;
19、range()函数:返回一个列表,打印从1到100;
20、file.read()函数:读取文件返回字符串;
21、file.readlines()函数:读取文件返回列表;
22、file.readline()函数:读取一行文件并返回字符串;
23、split()函数:用什么来间隔字符串;
24、isalnum()函数:判断是否为有效数字或字符;
25、isalpha()函数:判断是否全为字符;
26、isdigit()函数:判断是否全为数字;
27、 lower()函数:将数据改成小写;
28、upper()函数:将数据改成大写;
29、startswith(s)函数:判断字符串是否以s开始的;
30、endwith(s)函数:判断字符串是否以s结尾的;
31、file.write()函数:写入函数;
32、file.writeline()函数:写入文件;
33、abs()函数:得到某数的绝对值;
34、file.sort()函数:对书数据排序;
35、tuple()函数:创建一个元组;
36、find()函数:查找 返回的是索引;
37、dict()函数:创建字典;
38、clear()函数:清楚字典中的所有项;
39、copy()函数:复制一个字典,会修改所有的字典;
40、 get()函数:查询字典中的元素。
…………
用id()函数当a,b为2的时候id相同,而为2.5的时候不同,这种情况在string字符串的时候也会出现,即当很短的a,b赋值很短的字符串的时候,它们的id值相同,而很长的则不会。
id()函数用于获取对象的内存地址。语法id([object]),返回对象的内存地址。对于字符串、整数等类型,变量的id是随值的改变而改变的。
id(object)返回的是对象的“身份证号”,唯一且不变,但在不重合的生命周期里,可能会出现相同的id值。
用于获取对象的内存地址。
我们每一个人都有身份证来证明自己的身份。网络地址也有,那就是id。
网络id可以用来表示计算机属于哪个网络。Python中也有id函数,而Python中每个对象拥有唯一的内存id,所以id函数它主要用于获取指定对象的内存id值,是Python中必不可少的内置函数。Python中id()函数用于获取对象的内存地址。
id(object)返回的是对象的“身份证号”,唯一且不变,但在不重合的生命周期里,可能会出现相同的id值。此处所说的对象应该特指复合类型的对象(如类、list等),对于字符串、整数等类型,变量的id是随值的改变而改变的。