【Python-装饰器】什么是导入时和运行时
装饰器与被装饰函数的运行区别
在这里我们需要使用到https://pythontutor.com/render.html#mode=display这个网站。该网站可以一步一步的输出整段代码的运行流程。
一些名词的定义:
“Global frame” 是指程序运行时的全局环境,在这个环境中,全局变量、函数和其他重要的程序元素被定义和存储。这个全局环境可以被程序中的任何部分访问到,并且对程序的整体行为起着重要的作用。
通过FluentPython中的一个案例来分析什么是导入时,什么是运行时。
案例示例:registration.py
registry = [] # 1
def register(func): # 2 11
print(f'running register({func})') # 5 12
registry.append(func) # 6 13
return func # 7 14
@register # 3 8
def f1(): # 4
print('running f1()') # 23
@register # 9
def f2(): # 10 15
print('running f2()') # 25
def f3(): # 16
print('running f3()') # 26
def main(): # 17
print('running main()') # 20
print('registry ->', registry) # 21
f1() # 22
f2() # 24
f3() # 26
if __name__ == '__main__': # 18
main() # 19
首先,在该registration.py
这个程序被运行时,Python会先将该程序中的全局变量,全局函数由上至下的生成对象定义并存储到Global frame这个全局环境中。
但是