首页 > 解决方案 > 如何从外部执行嵌套函数

问题描述

我想调用 b() 而不使其成为全局函数。

def a():
  def b():
    print(0)

a.b()

>> AttributeError: 'function' object has no attribute 'b'

这是可能的还是我必须让它全球化?

标签: python

解决方案


一种方法是让areturn b

def a():
   def b():
       print(0)
   return b

a()()  # prints '0'

b = a()
b()    # also prints '0'

通常,您只能访问在函数内声明的变量(如果它们被返回)。

这是您在装饰器函数中经常看到的模式,因为装饰器通常在本地创建一个“包装器”函数,然后将包装器函数作为其输出返回。


推荐阅读