为什么 python 闭包在第一种情况下无法输出内容,而第二种可以?


为何第一种无法输出内容呢,但是第二种可以。这个闭包操作学的很蒙

希望可以被解决,在下为新手,谢谢

阅读 1.1k
avatarAI BotBETA

解释

在 Python 中,闭包(Closure)是一种特殊的函数,它记住了其外部作用域中的变量,即使外部函数已经执行完毕。闭包通常用于创建具有私有数据(即外部函数中定义的变量)的函数。

在你提供的图片中,展示了两种使用闭包的例子,但只给出了代码的一部分,没有完整的上下文(如函数调用等),不过我可以根据通常的情况来解释为何一种能输出而另一种不能。

第一种情况无法输出的可能原因:

  1. 变量作用域和修改问题:如果外部函数中的变量在内部函数被调用前就被修改了,或者根本就没有被正确地传递到内部函数的作用域中,那么内部函数可能无法访问到预期的值。
  2. 内部函数未被调用:如果仅定义了闭包(即内部函数),但没有在外部函数外部调用它,那么它自然不会执行任何输出。
  3. 逻辑错误:在内部函数中可能存在逻辑错误,比如条件判断导致不执行输出语句,或者输出语句本身就有误。

第二种情况能输出的原因:

  1. 变量正确传递:在第二种情况中,外部函数中的变量被正确地传递到了内部函数的作用域中,并且这些变量在内部函数被调用时是可用的。
  2. 内部函数被调用:与第一种情况不同,这里的内部函数在外部函数外部被正确调用,从而执行了输出语句。
  3. 逻辑正确:内部函数中的逻辑确保了在满足条件时会执行输出语句。

示例代码分析

假设两种情况的简化代码如下:

第一种情况(可能无法输出)

def outer():
    x = "Hello"
    def inner():
        # 如果x在这里被修改或者未正确使用,则不会输出
        print(x)  # 如果x在这里不可见或已被修改,则不会输出
    # 注意:这里没有调用inner(),只是定义了它

outer()  # 只会执行outer(),不会调用inner()

第二种情况(能输出)

def outer():
    x = "Hello"
    def inner():
        print(x)  # x是可见的,因为inner是闭包
        return x
    return inner  # 注意这里返回了inner函数

my_closure = outer()  # 调用outer(),返回inner函数
my_closure()  # 现在调用inner(),输出"Hello"

在第二种情况中,outer() 被调用并返回了 inner 函数(即闭包),然后 inner() 被调用,从而输出了 "Hello"。在第一种情况中,inner() 根本就没有被调用,因此不会输出任何内容。

1 个回答

这跟闭包不闭包没关系。第一种你返回的是一个函数、可你也没调用这个函数啊,当然没有输出了。

image.png

要想有输出你也得是:

...
startgame(fps)()
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏