【Python-装饰器】什么是导入时和运行时

白猫打不过黑猫 / 2023-09-01 / 原文

装饰器与被装饰函数的运行区别

在这里我们需要使用到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这个全局环境中。
但是