gpt4 book ai didi

python - 在 Python 中查找变量的先前值

转载 作者:太空狗 更新时间:2023-10-30 00:28:55 24 4
gpt4 key购买 nike

这可能是一个非常奇怪的问题,但是,

考虑一个名为a 的变量。现在让我们为其分配一个值,如下所示:

a = 1

现在让我们改变a的值。

a = 3

在 Python 中是否有任何方法可以知道变量的先前值而不将其存储在另一个变量中。Python 是否在内部维护一种可以访问的变量在其生命周期内的所有值的分类帐?

最佳答案

回答:其实我们可以

但不是一般情况。

为此你需要一些魔法。

而 magick 被称为“自定义命名空间”。

整个想法来自 Armin Ronacher 的演讲 5 years of Bad Ideas .

Magick:具有值历史的自定义命名空间

让我们创建自定义命名空间来保存值的历史记录。

出于演示目的,让我们更改 __del__ 的规则 - 我们将插入 None,而不是删除值。

from collections import MutableMapping
class HistoryNamespace(MutableMapping):
def __init__(self):
self.ns = {}
def __getitem__(self, key):
return self.ns[key][-1] # Rule 1. We return last value in history
def __delitem__(self, key):
self.ns[key].append(None) # Rule 4. Instead of delete we will insert None in history
def __setitem__(self, key, value): # Rule 3. Instead of update we insert value in history
if key in self.ns:
self.ns[key].append(value)
else:
self.ns[key] = list([value,]) # Rule 2. Instead of insert we create history list
def __len__(self):
return len(self.ns)
def __iter__(self):
return iter(self.ns)

history_locals = HistoryNamespace()
exec('''
foo=2
foo=3
del foo
foo=4
print(foo)
''', {}, history_locals)
print("History of foo:", history_locals.ns['foo'])

欢喜吧!

自定义命名空间是一种非常强大的技术,但几乎从未使用过。

我觉得有些令人费解的事实。

关于python - 在 Python 中查找变量的先前值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54743805/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com