Еще один вопрос о переменной области Python - PullRequest
2 голосов
/ 06 июня 2011

У меня есть следующий код:

>>> def f(v=1):
...     def ff():
...             print v
...             v = 2
...     ff()
...
>>> f()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 5, in f
  File "<stdin>", line 3, in ff
UnboundLocalError: local variable 'v' referenced before assignment

Я понимаю, почему возникает это сообщение ( Вопрос области видимости переменной Python ), но как я могу работать с переменной v в этом случае? global v в этом случае не работает.

Ответы [ 2 ]

6 голосов
/ 06 июня 2011

В Python 3.x вы можете использовать nonlocal:

def f(v=1):
    def ff():
        nonlocal v
        print(v)
        v = 2
    ff()

В Python 2.x нет простого решения.Взломать это сделать v список:

def f(v=None):
    if v is None:
        v = [1]
    def ff():
        print v[0]
        v[0] = 2
    ff()
1 голос
/ 06 июня 2011

Вы не передали v внутренней функции ff. Он создает свою собственную область, когда вы объявляете это. Это должно работать в Python 2.x:

def f(v=1):
  def ff(v=1):
    print v
    v = 2
  ff(v)

Но вызов присваивания v = 2 не будет постоянным при других вызовах функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...