Can Nested Functions Modify Variables in Enclosing Scopes in Python?

Susan Sarandon
Release: 2024-10-21 18:40:03
Original
364 people have browsed it

Can Nested Functions Modify Variables in Enclosing Scopes in Python?

Unbound Local Variables in Nested Function Scopes

In Python, nested functions access variables defined in their enclosing scopes, enabling code reuse and encapsulation. However, attempting to modify a variable in an enclosing scope within a nested function can result in an "UnboundLocalError" if the variable is not declared as nonlocal or global.

Consider the following code:

<code class="python">def outer():
    ctr = 0

    def inner():
        ctr += 1</code>
Copy after login

When you invoke inner(), you'll encounter an "UnboundLocalError" because ctr is not defined within the inner function. To fix this, you can use the following approaches:

For Python 3 and later:

Use the nonlocal Keyword

The nonlocal keyword allows you to modify variables defined in an enclosing scope from within a nested function.

<code class="python">def outer():
    ctr = 0

    def inner():
        nonlocal ctr
        ctr += 1</code>
Copy after login

For Python 2 and earlier:

Use a Data Structure to Hold the Variable

In Python 2, nested functions cannot modify variables in enclosing scopes, so you must use a data structure to hold the variable and pass it to the nested function.

<code class="python">def outer():
    ctr = [0]

    def inner():
        ctr[0] += 1</code>
Copy after login

Replace all occurrences of ctr in your code with ctr[0].

The above is the detailed content of Can Nested Functions Modify Variables in Enclosing Scopes in Python?. For more information, please follow other related articles on the PHP Chinese website!

source:php
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
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!