首页 > 后端开发 > Python教程 > 为什么在 Python 循环中创建的函数都返回相同的值?

为什么在 Python 循环中创建的函数都返回相同的值?

DDD
发布: 2024-12-22 01:57:14
原创
656 人浏览过

Why Do Functions Created in a Python Loop All Return the Same Value?

循环中的函数和 Lambda 创建异常

当尝试在循环内生成函数时,如下面的代码片段所示,出现问题:

functions = []

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

同样,当使用lambda:

functions = []

for i in range(3):
    functions.append(lambda: i)
登录后复制

人们期望这些函数输出不同的值(0、1 和 2),但所有函数最终都会产生相同的值 (2)。

解释及解决办法

这种现象是由于变量绑定后期造成的。在Python函数中,变量在调用时解析,这意味着当循环后调用函数时,i的值已经设置为2。为了纠正这个问题,我们通过引入f(i=i)语法来采用早期绑定。在这里,i 参数的默认值是在定义时建立的,从而导致早期绑定:

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

或者,使用闭包和“函数工厂”的更复杂的方法可确保早期绑定:好吧:

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

在循环中,我们可以使用 f = make_f(i) 而不是 def 语句。

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

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