带有自我值的python字典函数调用
Posted
技术标签:
【中文标题】带有自我值的python字典函数调用【英文标题】:python dictionary function calls with self values 【发布时间】:2017-09-17 18:45:21 【问题描述】:在 Python 中,如何在调用同一个字典中引用的函数时取消引用字典的值?
对于(愚蠢的)示例:
def f1(x, y, z):
return (x+y)/z
player =
'x' : 0,
'y' : 22,
'z' : -37,
'f' : f1(self.x, self.y, self.z)
我知道可以通过类来做到这一点。当然。但是,可以用字典做到这一点吗?
【问题讨论】:
你不能,因为在构造字典之前首先解析所有键和值表达式。因此,您不能在创建字典之前引用字典中的值。此外,大多数语言都有一些特殊的关键字,例如this
或 self
。 Python 没有。只是因为self
被正确“注入”了元类。大多数人将__init__
视为构造函数,但可以通过元类省略__init__
。在构造 __init__
时,实例已经构造好了。
我不明白这个问题。我必须受审。
@JeanFrancoisFabre:SaraToo 想要在构造'f'
的值时获取与'x'
键关联的值。
【参考方案1】:
您不能在文字中执行此操作,因为在评估文字时,字典不存在(还)。所以没有办法引用它。
不过,您可以稍后再插入:
>>> player = 'x' : 0, 'y' : 22, 'z' : -37
>>> player['f'] = f1(player['x'], player['y'], player['z'])
>>> player
'f': -0.5945945945945946, 'x': 0, 'y': 22, 'z': -37
或者如果它应该是动态的,您可以使用包装器。例如lambda
函数:
>>> player = 'x' : 0, 'y' : 22, 'z' : -37
>>> player['f'] = lambda: f1(player['x'], player['y'], player['z'])
>>> player['f']()
-0.5945945945945946
>>> player['x'] = 10
>>> player['f']()
-0.8648648648648649
>>> player['x'] = 100
>>> player['f']()
-3.2972972972972974
但我想将Player
设为一个类会更易读且更易于维护。类也使这类事情变得微不足道,而不需要 lambda
s 或类似的东西。
【讨论】:
【参考方案2】:定义 f1(x, y, z): 返回 (x+y)/z
l = [10, 4, 7, f1]
l[3](l[0], l[1], l[2])
【讨论】:
以上是关于带有自我值的python字典函数调用的主要内容,如果未能解决你的问题,请参考以下文章