摘要:在看python异步的源码中偶然看到的__code__中的co_names和co_varnames属性以及co_freevars和co_consts属性

co_names和co_varnames属性

__code__.co_names是一个包含全局变量名字的元组。__code__.co_varnames一个包含局部变量名字的元组。

代码如下:

a = 1

def f(b):
    c = a + b
print(f.__code__.co_varnames)
print(f.__code__.co_names)

'''
运行结果:
('b', 'c')
('a',)
'''

参考自:什么是co_names?

co_freevars和con_consts

这两个变量通过下面例子意会吧....

代码如下:

def f(a):
    c = "zeze"
    def g(b):
        print(a, b)
    return g

print(f.__code__.co_freevars)
print(f.__code__.co_consts)

g = f(5)
print(g.__code__.co_freevars)
print(g.__code__.co_consts)

'''
运行结果:
 格式化
()
(None, 'zeze', <code object g at 0x7f9725975a30, file "/code/main.py", line 3>)
('a',)
(None,)
'''

参考自:利用OpCode绕过Python沙箱