Информация об изменениях

Сообщение Re[2]: [python] eval не видит locals в list comprehension от 06.04.2023 12:48

Изменено 06.04.2023 12:49 Кодт

Re[2]: [python] eval не видит locals в list comprehension
Здравствуйте, Буравчик, Вы писали:

Б>Что, намного становится хуже с globals?


Не я писал этот код, поэтому сказать, насколько хуже, — не знаю. Но мотивация была именно такая.

Хотя... я знаю, как пофиксить.
Напишу каскадный словарь.
Что-то в духе
class SuperGlobals:
    def __init__(self, g, l):
        self.g, self.l = g, l
    def __getitem__(self, k):
        return self.l[k] if k in self.l else self.g[k]
    def __contains__(self, k):
        return k in self.l or k in self.g


ну или буду профилировать и смотреть, насколько страшен чёрт, если делать
g = dedicated_globals()
l = dedicated_locals()

g.update(l)
eval(....., g, None)
Re[2]: [python] eval не видит locals в list comprehension
Здравствуйте, Буравчик, Вы писали:

Б>Что, намного становится хуже с globals?


Не я писал этот код, поэтому сказать, насколько хуже, — не знаю. Но мотивация была именно такая.

Хотя... я знаю, как пофиксить.
Напишу каскадный словарь.
Что-то в духе
class SuperGlobals:
    def __init__(self, g, l):
        self.g, self.l = g, l
    def __getitem__(self, k):
        return self.l[k] if k in self.l else self.g[k]
    def __contains__(self, k):
        return k in self.l or k in self.g


ну или буду профилировать и смотреть, насколько страшен чёрт, если делать
g = copy.copy(dedicated_globals())
l = dedicated_locals()

g.update(l)
eval(....., g, None)