2013-07-05 6 views
0

У меня есть большая функция, внутри которой вложены несколько функций, а именно:Доступ к переменному, определенным в функции

def primary(input): 

    def second(): 
     print "something" 

    def third(): 
     treasure = "Success!" 
     print treasure 

Третьей функции() определяет переменные сокровища и выводит его. Как мне изменить область действия этой переменной, чтобы я мог печатать сокровища у интерпретатора без необходимости вызывать какие-либо функции, но все же позволяя функциям получать доступ к нему или изменять его?

+1

Я настоятельно рекомендую вам переосмыслить структуру вашего кода, если это то, что вам нужно. –

ответ

3

Вам нужно было бы сделать его глобальным; локальные переменные в функциях недоступны, вложены или нет.

Просто доступаtreasure как глобальный работает просто отлично:

treasure = "Success!" 

def primary(input): 
    def second(): 
     print "something" 

    def third(): 
     print treasure 

Для изменения treasure в области видимости функции, объявить его глобальным с global ключевого слова.

treasure = "Success!" 

def primary(input): 
    def second(): 
     print "something" 

    def third(): 
     global treasure 
     treasure = 'changed!' 
     print treasure 

    third() 
0

Если функция third() добавляет ключевое слово "global" перед сокровищем. Это позволяет другим функциям использовать эту переменную.

Существует еще один способ сделать это, который определяет var в начале кода, это выглядит намного лучше, и я узнал, как это сделать.

treasure = "Success!" 

def second(): 
    print "Something." 

def third(): 
    print treasure 

third() 

Удачи.

+0

Вы не сможете изменить эту переменную, если не используете ключевое слово 'global':' >>> treasure = "Success!" >>> def 4th(): ... сокровище = "Остров!" ... >>> 4th() >>> treasure 'Успех!' ' – 2rs2ts

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