Во-первых, отказ от ответственности: «вытягивать» переменные в локальную область любым другим способом, кроме var = something
, действительно действительно действительно не рекомендуется.Это делает ваш код действительно запутанным для тех, кто не очень хорошо знаком с тем, что вы делаете (то есть с теми, кто не вы или кто вы 6 месяцев в будущем и т. Д.)
Это, как говорится, только для образовательных целей, есть способ.Ваша функция pull_args
может быть реализована так:
def pull_args(request, *args):
pulled = {}
try:
for a in args:
pulled[a] = request[a]
except AttributeError:
logging.error("some arg was missing in " + self.request.path)
exit()
else:
caller = inspect.stack()[1][0]
caller.f_locals.update(pulled)
По крайней мере, кое-что на этот счет сработало, когда я придумал ее, вероятно, около года назад.Я не обязательно буду рассчитывать на продолжение работы в будущих версиях Python.(Еще одна причина не делать этого) Лично я никогда не находил веских причин использовать этот фрагмент кода.