带有自我值的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)

我知道可以通过类来做到这一点。当然。但是,可以用字典做到这一点吗?

【问题讨论】:

你不能,因为在构造字典之前首先解析所有键和值表达式。因此,您不能在创建字典之前引用字典中的值。此外,大多数语言都有一些特殊的关键字,例如 thisself。 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 设为一个类会更易读且更易于维护。类也使这类事情变得微不足道,而不需要 lambdas 或类似的东西。

【讨论】:

【参考方案2】:

定义 f1(x, y, z): 返回 (x+y)/z

l = [10, 4, 7, f1]

l[3](l[0], l[1], l[2])

【讨论】:

以上是关于带有自我值的python字典函数调用的主要内容,如果未能解决你的问题,请参考以下文章

从每个键有多个值的字典中调用特定的字典值,Python

python(51):Python vars() 函数

python 返回函数参数名和传入参数值的字典表

python可变长参数(非关键字及关键字参数)

python中自定义函数的保留字是

Python学习小记