Как сделать переменную доступной внутри другой функции - PullRequest
0 голосов
/ 15 июня 2019

Рассмотрим этот пример:

def func1():
    val = 1
    res = [1]
    def fun2():
        print(res)
        print(val)
        val = 2 
    fun2()
    print(val)

func1()

Возникает следующее исключение:

UnboundLocalError: local variable 'val' referenced before assignment

Список res доступен для fun2, но val - нет. Я знаю, что list является изменяемым, а int - нет, но есть ли способ сделать val доступным также для fun2? В классе я мог бы легко добиться этого с помощью self.val, но есть ли способ сделать это внутри функции?

Ответы [ 2 ]

1 голос
/ 15 июня 2019

Используйте оператор nonlocal , чтобы сделать переменную, определенную во вмещающей функции, доступной для внутренней функции, например:

def func1():
    val = 1
    res = [1]
    def fun2():
        nonlocal val
        print(res)
        print(val)
        val = 2 
    fun2()
    print(val)

func1()

См. Также: ранее SOвопрос .

0 голосов
/ 15 июня 2019

Вы можете сделать это следующим образом:

def func1():
    val = 1
    res = [1]
    def fun2(val=val, res=res):
        print(res)
        print(val)
        val = 2 
        return val
    val = fun2()
    print(val)

Тогда вывод будет

>>> func1()
[1]
1
2
...