Во-первых, то, что я думаю, что понимаю:
- предоставляет неизменяемый словарь.
Код: Выделить всё
locals()
- Функция может (и действительно использует) использовать некоторую оптимизацию для доступа к своим локальным переменным
- предоставляет словарь, подобный locals(), но менее склонен к хакерским действиям через exec. Или, по крайней мере, у меня меньше возможностей делать хакерские недокументированные вещи, такие как locals()['var'] = value ; exec ""
Код: Выделить всё
frame.f_locals
- способен делать странные вещи с локальными переменными, но он ненадежен — например. Я где-то читал, что это не работает в Python 3. Не проверял.
Код: Выделить всё
exec
Однако должна быть возможность изменить уже существующую переменную, не так ли? это?
Вещи, которые я рассмотрел:
- В функции f можно получить доступ к f .func_code.co_nlocals и f.func_code.co_varnames.
- В фрейме переменные могут быть доступны/проверены/прочитаны через фрейм.f_locals. Это в случае установки трассировщика через sys.settrace.
- Можно легко получить доступ к функции, в которой находится кадр, --не считая варианта использования установки трассировку и использовать ее, чтобы «делать что-то» с локальными переменными, заданными определенным триггером или чем-то еще.
Как я могу добиться такой модификации переменных из функции трассировки или из декорированной обернутой функции или чего-то в этом роде?
Hackish exec делает такие вещи.
Подробнее здесь: https://stackoverflow.com/questions/346 ... e-f-locals