Python高频调用外层函数时,内部嵌套函数是否会重复解析?
关于Python内部函数重复创建的问题解答
好问题!咱们来把这个事儿说清楚:
每次调用
f1()时,Python都会重新创建一个新的f2函数对象,不会复用之前的引用。
原因很简单:Python的函数定义语句(def)是在运行时执行的。当你调用f1()的时候,程序执行到内部的def f2()这一行,就会生成一个全新的函数对象——而且这个f2是闭包,它会捕获当前f1调用上下文里的a,b,c,d,e,f变量,所以每次生成的f2都是独一无二的。你可以用一个小实验验证这一点:
def f1(): def f2(): pass print(id(f2)) # 打印f2的内存地址 return f2 # 调用两次f1,看输出的id是否相同 f1() f1()运行这段代码,你会发现两次输出的内存地址不一样,说明每次都是新的
f2对象。不过别担心性能问题!
创建函数对象的开销非常小,哪怕调用f1()一千次,这个过程也不会成为性能瓶颈。如果你的代码真的需要极致优化(其实对于一千次调用完全没必要),可以考虑把f2移到f1外部,用类或者数据结构(比如dataclass)来打包参数,避免闭包的重复创建,但大多数情况下完全没必要折腾。
内容的提问来源于stack exchange,提问作者user3758232
相关产品推荐
相关产品推荐

