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

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

Susan Sarandon
Susan Sarandon原创
2024-12-20 16:22:10751浏览

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

了解在循环或推导式中创建函数时的后期绑定

尝试在循环中创建函数时,您可能会遇到以下情况:尽管期望输出不同,但所有函数都返回相同的值。出现此行为的原因是后期绑定,其中变量的值在执行时解析。

Python 的后期绑定

在 Python 中,函数和 lambda 可以通过执行时默认绑定变量。这意味着调用函数时会查找其中使用的任何变量。在循环中,循环迭代器 i 稍后会被解析,到那时,它会引用循环后 i 的最终值。

例如,在以下代码片段中:

functions = []

for i in range(3):
    def f():
       return i

    functions.append(f)

函数列表中的所有函数都引用相同的 i 值,循环结束后 i 为 2。

强制提前执行绑定

要解决此问题,您需要强制早期绑定,这确保 i 的值在函数定义时绑定。实现此目的的一种方法是使用参数的默认值,如下所示:

functions = []

for i in range(3):
    
    def f(i=i):
       return i
    
    functions.append(f)

通过为 i 参数提供默认值,可以强制执行早期绑定。传递给 f 函数的 i 值在函数定义时解析,而不是在函数执行时解析。

使用函数工厂

另一种方法是使用函数工厂来创建具有所需绑定的函数。这涉及创建一个附加函数,该函数接受要绑定的变量并返回带有早期绑定变量的嵌套函数:

def make_f(i):

    def f():
        return i
        
    return f

在循环中,您可以使用 f = make_f(i) 来创建具有适当的早期绑定的函数。

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn