Измените существующую переменную в `locals()` или `frame.f_locals`Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Измените существующую переменную в `locals()` или `frame.f_locals`

Сообщение Anonymous »

Я нашел несколько неопределенно связанных с этим вопросом вопросов, но не нашел какого-либо четкого и конкретного решения для CPython. И я предполагаю, что «действительное» решение зависит от конкретного интерпретатора.
Во-первых, то, что я думаю, что понимаю:
  • Код: Выделить всё

    locals()
    предоставляет неизменяемый словарь.
  • Функция может (и действительно использует) использовать некоторую оптимизацию для доступа к своим локальным переменным
  • Код: Выделить всё

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

Подробнее здесь: https://stackoverflow.com/questions/346 ... e-f-locals
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • GDALWarpRegionToBuffer и мозаика, когда Dst Frame не содержится строго в Src Frame
    Anonymous » » в форуме C++
    0 Ответы
    89 Просмотры
    Последнее сообщение Anonymous
  • Global Frame vs. Stack Frame
    Anonymous » » в форуме Python
    0 Ответы
    31 Просмотры
    Последнее сообщение Anonymous
  • HTML5 Frame-By-Frame Просмотр / поиск кадров?
    Anonymous » » в форуме Html
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • ContextManager получает доступ к locals() вызова с помощью блока
    Anonymous » » в форуме Python
    0 Ответы
    40 Просмотры
    Последнее сообщение Anonymous
  • Разница между форматом (**locals()) и f-строкой при использовании переменной в качестве ключа для словарей
    Anonymous » » в форуме Python
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»