2013-04-09 3 views
0

Я пытаюсь сделать что-то по следующим направлениям в Python3:Python Уплотненной Функция Variable Назначение

i = 1337 
def g(): 
    print(i) 
    i = 42 
g() 

но получает следующую ошибку

UnboundLocalError: local variable 'i' referenced before assignment 

Я думаю, я понимаю, что такое средство сообщения об ошибках , но почему это так? Есть ли способ обойти это?

+0

См. Http://stackoverflow.com/q/370357/875127 –

ответ

5

В двух словах - если заданному имени переменной не присвоено значение внутри функции, то будут проверяться ссылки на переменную. Используйте глобальные - и в таком случае питон будет искать I в глобальном масштабе:

i = 1337 

def g(): 
    global i 
    print i 
    i = 42 

g() 

Вы можете прочитать больше на variable scopes in PEP-0227

1

Если вы действительно хотите сделать это таким образом, вы должны будете получить i из глобальной области.

def g(): 
    global i 
    print i 
    i = 42 

Однако, как правило, вам было бы намного лучше изменять, как работает ваш код, чтобы не требовать глобальных переменных. В зависимости от того, как вы его используете, это может быть так же просто, как передать i в качестве параметра и вернуть измененное значение.

0

Пример предложения Keeyai о переходе в I в качестве параметра:

i = 1337 
def g(i): 
    print(i) 
    i = 42 
g(i) 

Однако, вы никогда не использовать новое значение I, так что, возможно, что-то вроде этого имеет смысл:

def g (i): 
    i = 42 
    return i 

i = 1337 
print g(i) 
Смежные вопросы