我试图想出一种方法来隔离在我的代码中的某个点之后已经定义的变量。为此,我写了以下内容:
from copy import deepcopy
beginning = deepcopy(dict(globals())) # getting the current stand
a = 5 # new variable gets defined
# possibly more code with other definitions here
end = {k: v for k, v in dict(globals()).items() if k not in beginning}
打印end
后,我希望只看到{'a': 5}
,但事实并非如此。相反,我重新获得了整个范围。
结果很明显,字典理解上的if
条件失败了。所以我有两个问题:
P.S:我使用的是Python 3.6.1
答案 0 :(得分:3)
我在应用TypeError: can't pickle module objects
时得到deepcopy()
但忽略了这一点(并进行浅层复制),您可以获得所需的输出。
我认为您的概念错误是忘记beginning
globals()
已被添加到dict
if
,需要在>>> beginning = dict(globals())
>>> a = 5
>>> end = {k: v for k, v in dict(globals()).items() if k not in beginning and k != 'beginning'}
>>> end
{'a': 5}
子句中排除:
{{1}}