Ну, это немного, хм ... непифонический ... некрасивый ... хакский ...
Вот фрагмент кода, предполагающий, что вы хотите создать словарь всех локальных переменныхВы создаете после того, как определенная контрольная точка взята:
checkpoint = [ 'checkpoint' ] + locals().keys()[:]
## Various local assigments here ...
var_keys_since_checkpoint = set(locals().keys()) - set(checkpoint)
new_vars = dict()
for each in var_keys_since_checkpoint:
new_vars[each] = locals()[each]
Обратите внимание, что мы явно добавляем ключ 'контрольной точки' в наш захват locals().keys()
Я также явно беру часть этого, хотя это не должно 'в этом случае это необходимо, так как ссылка должна быть сведена, чтобы добавить ее в список ['checkpoint'].Однако, если вы использовали вариант этого кода и пытались сократить ['checkpoint'] + portion (because that key was already in
locals () , for example) ... then, without the [:] slice you could end up with a reference to the
locals (). Keys () `, значения которых будут меняться при добавлении переменных.
OffhandЯ не могу придумать способ вызвать что-то вроде new_vars.update()
со списком ключей, которые будут добавлены / обновлены.Так что цикл for
является наиболее переносимым.Я полагаю, что словарь может быть использован в более поздних версиях Python.Однако это будет не более чем игра в гольф.