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