Исключения для «локальных переменных известны», если функция использует оператор exec, и не рекомендуется использовать «из модуля import *». Сгенерированный байт-код отличается и медленнее для этих случаев.
водуЭтот вопрос, в интерпретаторе есть немного леса для проверки объектов кадра, которые могут быть полученыsys._getframe()
, Похоже, что объекты фрейма доступны только для чтения, но я не могу найти ничего очевидного в документах, где это прямо указано. Может ли кто-нибудь подтвердить, доступны ли эти объекты для записи (каким-либо образом) или только для чтения?
import sys
def foobar():
xx='foo'
ff = sys._getframe()
ff.f_locals['xx'] = 'bar'
print xx
if __name__ == '__main__':
foobar()
Это распечатываетfoo
'при запуске, но пост ниже демонстрирует возможность записи переменной при запуске из текущего кадра в интерактивной оболочке.