首页 > 后端开发 > Python教程 > 为什么在循环中创建的函数有时会返回错误的值?

为什么在循环中创建的函数有时会返回错误的值?

Linda Hamilton
发布: 2024-12-27 18:11:15
原创
365 人浏览过

Why Do Functions Created in Loops Sometimes Return the Wrong Values?

处理循环中的函数创建:后期绑定故障排除

尝试在循环中创建函数时,会出现一个常见问题。在提供的示例中,目标是生成分别返回 0、1 和 2 的三个函数。然而,所有三个函数最终都返回相同的值 (2)。发生这种情况是由于后期绑定,其中函数将对变量“i”的评估推迟到最后可能的时刻。

了解后期绑定

在没有修复的代码中:

for i in range(3):
    def f():
        return i
登录后复制

每个“f”都会查找'i' 在循环执行的后期,此时 'i' 已达到其最终值 2。因此,尽管循环打算创建返回 0、1 和 2 的函数,但所有三个函数都返回 2。

解决问题

这个问题的解决方案是尽早强制执行绑定。这可以通过将“i”作为参数传递给“f”函数来实现,如下所示:

for i in range(3):
    def f(i=i):
        return i
登录后复制

在此更新的代码中,当执行循环时,在定义时查找“i”而不是在执行“f”时的调用时。

使用的替代解决方案闭包

另一种方法是使用闭包创建“函数工厂”:

def make_f(i):
    def f():
        return i
    return f
登录后复制

在循环内,可以使用 'f = make_f 创建 'f' (我)'。这种方法还确保了早期绑定,因为函数“make_f”在定义时将“i”的值传递给“f”。

以上是为什么在循环中创建的函数有时会返回错误的值?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板