Python 3:如何从父函数调用嵌套函数(非访问变量)
如何在Python 3中调用嵌套函数
嘿,我明白你的困惑啦!之前搜的大多是讲用global或nonlocal访问嵌套函数里的变量,但你要的是直接调用嵌套函数对吧?别着急,我给你分两种常见场景讲清楚:
场景1:在父函数内部调用嵌套函数
这是最基础的用法,完全不需要特殊关键字,直接在父函数里调用嵌套函数的名称就行:
def parent(): # 定义你的嵌套“子程序” def nested(): print("嵌套函数执行啦!") # 父函数内部直接调用嵌套函数 nested() # 调用父函数时,就会触发嵌套函数的执行 parent() # 输出:嵌套函数执行啦!
场景2:在父函数外部(顶层作用域)调用嵌套函数
嵌套函数默认只在父函数的作用域内可见,如果想在父函数外面调用它,就得把它“暴露”到外部作用域,这里有两种常用方法:
方法1:让父函数返回嵌套函数
把嵌套函数作为父函数的返回值,调用父函数后就能拿到嵌套函数的引用,之后想什么时候调用都行:
def parent(): def nested(): print("我是被外部调用的嵌套函数!") # 返回嵌套函数对象 return nested # 调用父函数,获取嵌套函数的引用 my_nested = parent() # 直接调用嵌套函数 my_nested() # 输出:我是被外部调用的嵌套函数!
方法2:将嵌套函数绑定到全局变量
如果你不想用返回值的方式,也可以在父函数内部把嵌套函数赋值给全局变量,不过这种方式尽量少用,容易让代码变乱:
# 先声明一个全局变量占位 nested_func = None def parent(): global nested_func def nested(): print("通过全局变量调用的嵌套函数!") # 把嵌套函数赋值给全局变量 nested_func = nested # 先调用父函数,完成全局变量的赋值 parent() # 现在就能在外部调用嵌套函数了 nested_func() # 输出:通过全局变量调用的嵌套函数!
小提醒
嵌套函数有个很实用的闭包特性:如果它用到了父函数里的变量,哪怕父函数执行完了,嵌套函数依然能访问这些变量,比如可以用它做一些状态保存的功能~
内容的提问来源于stack exchange,提问作者RBV
相关产品推荐
相关产品推荐

