Почему моя функция не может получить доступ к переменной в функции включения?

Я знаю о правиле LEGB. Но простой тест того, имеет ли функция доступ для чтения к переменным, определенным в функции включения, кажется, на самом деле не работает. Т.е.:

#!/usr/bin/env python2.4
'''Simple test of Python scoping rules'''

def myfunction():
    print 'Hope this works: '+myvariable

def enclosing():
    myvariable = 'ooh this worked'
    myfunction()

if __name__ == '__main__':
    enclosing()

Возвраты:

NameError: global name 'myvariable' is not defined

Я делаю что-то не так? Существует ли больше к нему, чем порядок разрешения LEGB?

1
задан SilentGhost 1 June 2010 в 09:46
поделиться

1 ответ

вы можете ...

если вы сделали это так:

#!/usr/bin/env python2.4
'''Simple test of Python scoping rules'''

def enclosing():
    myvariable = 'ooh this worked'

    def myfunction():
         print 'Hope this works: ' + myvariable

    myfunction()

if __name__ == '__main__':
    enclosing()

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

2
ответ дан 3 September 2019 в 00:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: