python 为什么每次运行程序,id值都不同,而下面print(f1)却不变化,求详解
本帖最后由 huyanmin 于 2021-5-4 17:15 编辑def count():
fs =[]
for i in range(1,4):
def f():
return i*i
fs.append(f)
return fs
f1,f2,f3 =count()
print(f1())
print(f2())
print(f3())
print(id(f1))#此处打印的id值,为什么每次运行程序,id值都不同,而下面print(f1)却不变化,求详解
print(id(f2))
print(id(f3))
print(f1)
print(f2)
print(f3)
'''
第一次运行结果:
9
9
9
2264566893152
2264566893296
2264566893440
<function count.<locals>.f at 0x0000020F42B48A60>#此处的一串16进制数字代表什么意思?
<function count.<locals>.f at 0x0000020F42B48AF0> #此处的一串16进制数字代表什么意思?
<function count.<locals>.f at 0x0000020F42B48B80> #此处的一串16进制数字代表什么意思?
第二次运行结果:
9
9
9
3068290308704
3068290308848
3068290308992
<function count.<locals>.f at 0x000002CA645A9A60>
<function count.<locals>.f at 0x000002CA645A9AF0>
<function count.<locals>.f at 0x000002CA645A9B80>
'''
id的那个就是变量在内存中的地址,自然不可能每次都一样
下面的是函数计算后的一个值,这个要是发生变化,那还要计算机干嘛 wp231957 发表于 2021-5-3 08:44
id的那个就是变量在内存中的地址,自然不可能每次都一样
下面的是函数计算后的一个值,这个要是发生变化, ...
没明白 本帖最后由 小伤口 于 2021-5-4 09:12 编辑
你可以试试a,b,c=1然后打印他们的id,发现他们的id都不一样,其实变量赋值就是在内存开辟空间的过程,虽然他们的值是相等的,但其实是开辟三个为1的空间,id自然不一样。f1,f2,f3 =count(),就是函数返回值的内存地址,fi不加括号打印就是一个函数对象即<function count.<locals>.f at 0x0000020F42B48AF0这些东西,可以从字面意思理解为这个函数对象在本地的地址。 小伤口 发表于 2021-5-4 09:04
你可以试试a,b,c=1然后打印他们的id,发现他们的id都不一样,其实变量赋值就是在内存开辟空间的过程,虽然 ...
>>> a,b,c = 1,1,1
>>> a
1
>>> print(a)
1
>>> id(a)
140723135125152
>>> id(b)
140723135125152
>>> id (c)
140723135125152
>>> a,b,c 的id都相同 huyanmin 发表于 2021-5-4 11:08
>>> a,b,c = 1,1,1
>>> a
1
好家伙翻车了,我再想想吧{:10_245:} wp231957 发表于 2021-5-3 08:44
id的那个就是变量在内存中的地址,自然不可能每次都一样
下面的是函数计算后的一个值,这个要是发生变化, ...
还是不明白,希望老师有时间详细讲解一下
>>> '%#o'% 9#函数值9 的16进制0o11
'0o11'
每次执行程序print(f1()) 的值都是9,print(f1)都显示<function count.<locals>.f at 0x0000020F42B48A60> ,都是固定不变的,0x0000020F42B48A60这串16进制数字代表什么意思?看着像地址,但是每次id (f1)又
id值又变化,说它是函数的值也不对,此函数的值是9,9的16进制数字是0o11,希望老师指点迷津?我也知道函数名不带括号,是代表函数体本身
页:
[1]