【发布时间】:2021-08-27 12:13:03
【问题描述】:
我想做这样的事情(这是一个简单的例子,但它说明了问题):
a = {'a' : 3, 'b': (lambda x: x * 3)(a['a'])}
但我希望a['b'] 的值在a['a'] 更改时自动更新。
在这种情况下,a['b'] 当然只在开始时被评估,所以我得到了这个:
>>> a = {'a': 3, 'b': (lambda x: x * 3)(a['a'])}
>>> a
{'a': 3, 'b': 9}
>>> a['a'] = 4
>>> a
{'a': 4, 'b': 9}
我想要的是这个:
>>> a = {'a': 3, 'b':(lambda x: x * 3)(a['a'])}
>>> a
{'a': 3, 'b': 9}
>>> a['a'] = 4
>>> a
{'a': 4, 'b': 16} <<<<<<<<<< change
有谁知道是否有一种简单/pythonic 的方法来实现这一点?
【问题讨论】:
-
代码无法运行。因为
a尚未完成声明,而您正在引用a -
为此,您必须继承或编写字典并在
__getitem__中实现此行为。 -
你基本上想要一个
@property作为一个 dict 项目,TL;DR,这实际上是不可能的。最接近和最简单的方法是编写一个类似 dict 的类。
标签: python