无标题无名氏No.64382723 只看PO
2024-11-13(三)23:45:48 ID:XJzHWCJ 回应
肥哥们,在学python,有些疑问,请看
def f(fun):
print(10)
outvar=1
tbc=2
def inn(arg):
nonlocal tbc
print(outvar)
tbc+=1
print(f'{tbc =}')
return fun(arg)
return inn
c=f.__code__
c.co_varnames
#('fun','inn')
c.co_cellvars
#('fun', 'outvar', 'tbc')
为什么outvar和tbc不在co_varnames中呢?这两个也是局部变量吧(つд⊂)
jp
无标题无名氏No.64383658
2024-11-14(四)01:18:56 ID: ECoMLCH
>>No.64383074
你说的那几个变量储存在,f函数return的那个inn的inn.__closure__里
无标题无名氏No.64383689
2024-11-14(四)01:22:26 ID: ECoMLCH
>>No.64382723
这样的原因很好解释,当f函数运行结束后f的局部变量会被释放,但是由于inn还需要使用这些变量,所以就建立了这个机制保证这些变量的引用
无标题无名氏No.64393181
2024-11-14(四)23:49:05 ID: XJzHWCJ (PO主)
>>No.64383689
谢谢肥哥解答(つд⊂)
不过fun也被访问了吧,还是说函数的形参都会加入co_varnames( ゚∀。)