Home  >  Article  >  Backend Development  >  How do Python Lambda Functions Handle Local Variable References and When Do They Get Evaluated?

How do Python Lambda Functions Handle Local Variable References and When Do They Get Evaluated?

Linda Hamilton
Linda HamiltonOriginal
2024-10-27 04:06:02428browse

How do Python Lambda Functions Handle Local Variable References and When Do They Get Evaluated?

Understanding Python Lambda Binding with Local Values

When working with lambda functions in Python, it's important to understand how they interact with local variables, especially when multiple lambdas reference the same variable.

Consider the following example:

<code class="python">def pv(v):
    print(v)

x = []
for v in range(2):
    x.append(lambda: pv(v))  # Lambda binds to the reference of 'v'

for xx in x:
    xx()  # Prints 1 twice</code>

Initially, you might expect the lambda functions in the list 'x' to reference the current 'v' at the time of their creation. However, this is not how Python works. Instead, Python evaluates the variable name at the time of the function call, leading to both lambdas referencing the final value of 'v' (which is 1).

To achieve the desired behavior (printing 0 and then 1), you can utilize Python's default argument mechanism:

<code class="python">def pv(v):
    print(v)

x = []
for v in range(2):
    x.append(lambda v=v: pv(v))  # Lambda binds to the copy of 'v' at creation time

for xx in x:
    xx()  # Prints 0 and then 1</code>

By setting a default argument for 'v', the lambda functions are bound to a local copy of 'v' created at the time of their creation, ensuring they retain the correct references when used later.

Remember, Python looks up variable names at function call time, not creation time. This principle applies not only to lambdas but also to regular functions, as demonstrated by the following example:

<code class="python">x = "before foo defined"

def foo():
    print(x)  # Prints "after foo was defined"

x = "after foo was defined"
foo()</code>

The above is the detailed content of How do Python Lambda Functions Handle Local Variable References and When Do They Get Evaluated?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
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