Python中如何从另一函数调用嵌套在其他函数中的内部函数?
Python中调用嵌套内部函数的方法
嘿,这两个问题其实都是关于Python嵌套函数调用的事儿,答案当然是完全可行的!不过嵌套函数默认是被外层函数“藏起来”的,直接从外部碰不到,得用点小技巧让它能被调用,我结合你的代码给你拆解清楚:
一、先搞懂基础:从外层函数内部调用内部函数
如果只是在func1里面调用func2,那超级简单,直接在func1的代码里调用就行:
def func1(): def func2(): print("Hello!") # 直接在func1内部调用func2 func2() func1() # 执行这段代码就会打印出Hello!
二、重点解决:从func3调用func2(外层函数外部调用内部函数)
要在func3这种和func1平级的函数里调用func2,有两种常用方法:
方法1:让外层函数返回内部函数(推荐用法)
这是最符合Python闭包设计的方式,把func2作为func1的返回值,这样调用func1就能拿到func2的引用,然后在func3里调用它:
def func1(): def func2(): print("Hello!") return func2 # 返回内部函数的引用,相当于把func2“暴露”出去 def func3(): # 先通过调用func1拿到func2的引用 inner_func = func1() inner_func() # 调用func2 func3() # 执行后会打印Hello!
方法2:用全局变量间接调用(不推荐,尽量少用)
如果不想用返回值的方式,也可以把func2赋值给一个全局变量,这样func3就能直接访问这个全局变量来调用func2。不过全局变量容易让代码耦合度变高,除非特殊情况不建议用:
# 先定义一个全局变量用来存储func2的引用 global_func2 = None def func1(): global global_func2 # 声明要使用全局变量 def func2(): print("Hello!") global_func2 = func2 # 把func2赋值给全局变量 # 必须先调用一次func1,让全局变量拿到func2的引用 func1() def func3(): global global_func2 # 声明要使用全局变量 global_func2() # 调用func2 func3() # 执行后会打印Hello!
内容的提问来源于stack exchange,提问作者Rohan Sawant
相关产品推荐
相关产品推荐

