Home > Backend Development > Python Tutorial > Why Do Functions Created in a Loop Return the Same Value, and How Can I Fix It?

Why Do Functions Created in a Loop Return the Same Value, and How Can I Fix It?

Linda Hamilton
Release: 2025-01-04 13:05:47
Original
530 people have browsed it

Why Do Functions Created in a Loop Return the Same Value, and How Can I Fix It?

Creating Functions (or Lambdas) in a Loop (or Comprehension): Understanding Late Binding

When creating functions or lambdas within a loop, it's important to consider the concept of late binding. In the given example:

functions = []

for i in range(3):
    def f():
        return i
    functions.append(f)
Copy after login

each function looks up the value of i as late as possible, which is after the loop has finished. As a result, all functions return the final value of i, which is 2.

To fix this issue and get three distinct functions that output 0, 1, and 2, we need to force early binding. This can be achieved by using default parameters:

functions = []

for i in range(3):
    def f(i=i):  # Default parameter for i
        return i
    functions.append(f)
Copy after login

In this case, the default parameter i is evaluated at definition time, not at call time, ensuring that each function uses the correct value of i.

Alternatively, we can use a function factory to create functions with early binding:

def make_f(i):
    def f():
        return i
    return f

functions = []

for i in range(3):
    functions.append(make_f(i))
Copy after login

The make_f function creates a new function with the correct value of i bound early.

The above is the detailed content of Why Do Functions Created in a Loop Return the Same Value, and How Can I Fix It?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template