运行时发现,python的装饰器函数会在 import 的时候运行,甚是困惑。

分析下装饰器的实际实现方式,就能找到原因,如下:

# 一个简单的例子
def decro(f):
    print("Top code is exec!")
    def wrapper():
        f()
    return wrapper

@decro
def simple_function():
    print("in simple_function")

python 的 @xxx 是一个语法糖,在这里等价于:

def simple_function():
    print("in simple_function")

simple_function = decro(simple_function)

因此,import 的时候会执行 decro 这个函数