2015-11-02 3 views
0
def a(): 
    b = 1 
    def x(): 
     b -= 1 
    if something is something: 
     x() 
a() 

Что им хотят здесь, чтобы изменить b от a() в x() Я попытался с помощью;Python3 переменные в функциях

def a(): 
    b = 1 
    def x(): 
     global b 
     b -= 1 
    if something is something: 
     x() 

a() 

Но, как я и ожидал, это сказало, что глобальное значение b не определено.

b должно измениться после того, как x() будет уже работать, и если x() называется второй раз b должно быть то, что x() установить его - 0 не то, что он был первоначально установлен в a() - 1.

ответ

3

Для того, для изменения значения переменной, определенной в содержащей области, используйте nonlocal. Это ключевое слово похоже на намерение на global (что указывает, что переменная должна считаться привязкой в ​​глобальной области).

Так попробовать что-то вроде:

def a(): 
    b = 1 
    def x(): 
     # indicate we want to be modifying b from the containing scope 
     nonlocal b 
     b -= 1 
    if something is something: 
     x() 

a() 
+0

могли бы вы рассказать вообще о том, что не местные точно. Очень новичок в Python (хорошо программирование вообще) – user4341854

+0

Чем вы, это объяснение было совершенным – user4341854

1

Это должно работать:

def a(): 
    b = 1 
    def x(b): 
     b -= 1 
     return b 
    b = x(b) 
    return b 
a() 
+0

Спасибо, но я надеялся на способ сделать это, не используя 'return' – user4341854

Смежные вопросы