Я знаю о правиле 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?
вы можете ...
если вы сделали это так:
#!/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()
... иначе ваша функция не знает, где искать (ну, она знает, но она смотрит на глобальные переменные, поэтому вы получаете сообщение об ошибке) (передайте его как параметр, если вы не можете определить функцию как вложенная функция)