Python内部函数未打印外部函数初始化值的问题求助
兄弟,我一眼就瞅出问题出在哪了——你返回内部函数的方式错啦!
先给你拆解清楚两种写法的差异,你就能明白为啥P2没按你预期输出了:
你的代码执行逻辑
你写的return inner_function()是带括号的,这意味着在调用outer_function的瞬间,就会立刻执行inner_function。理论上调用outer_function("测试内容")时,P1打印完后,P2应该紧跟着输出同样的内容,但你说P2无输出,大概率是你误解了教程的执行流程——教程里的闭包示例,核心是返回函数对象(不带括号),让你可以在之后手动调用它,才触发P2的打印。
如果是把返回值赋值给变量(比如func = outer_function("xxx")),那func其实是inner_function()执行后的结果(也就是None,因为这个函数没写return语句),这时候你再调用func()只会报错,而P2的输出其实在赋值时就已经执行了,只是你没注意到。
和教程一致的正确写法
只需要把return语句的括号去掉,返回函数本身就行:
def outer_function(msg): message = msg print(message) #P1 def inner_function(): print(message) #P2 return inner_function # 不带括号,返回函数对象
调用的时候按照教程的方式来:
# 先拿到内部函数的引用 my_func = outer_function("Hello World") # 这时候P1已经打印了Hello World # 现在调用这个函数,才会触发P2的打印 my_func()
这样就实现了教程里的效果:P1在第一次调用outer_function时输出,P2在后续调用返回的函数对象时才输出。这也是闭包的核心意义——让内部函数记住外层函数的变量,并且能在外部被按需调用。
内容的提问来源于stack exchange,提问作者Vishwanath Seshagiri
相关产品推荐
相关产品推荐

