Home > Backend Development > Python Tutorial > 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
Release: 2024-10-27 04:06:02
Original
515 people have browsed it

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>
Copy after login

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>
Copy after login

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>
Copy after login

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!

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