简体   繁体   中英

Modify the function variables from inner function in python

It's ok to get and print the outer function variable a

def outer():
    a = 1
    def inner():
        print a

It's also ok to get the outer function array a and append something

def outer():
    a = []
    def inner():
        a.append(1)
        print a

However, it caused some trouble when I tried to increase the integer:

def outer():
    a = 1
    def inner():
        a += 1 #or a = a + 1
        print a

>> UnboundLocalError: local variable 'a' referenced before assignment

Why does this happen and how can I achieve my goal (increase the integer)?

In Python 3 you can do this with the nonlocal keyword. Do nonlocal a at the beginning of inner to mark a as nonlocal.

In Python 2 it is not possible.

A generally cleaner way to do this would be:

def outer():
    a = 1
    def inner(b):
        b += 1
        return b
    a = inner(a)

Python allows a lot, but non-local variables can be generally considered as "dirty" (without going into details here).

Workaround for Python 2:

def outer():
    a = [1]
    def inner():
        a[0] += 1
        print a[0]

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM