【问题标题】:python dictionary function calls with self values带有自我值的python字典函数调用
【发布时间】: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' 键关联的值。

标签: python dictionary user-defined-functions elements


【解决方案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])

    【讨论】:

      猜你喜欢
      • 2017-09-04
      • 2018-06-14
      • 1970-01-01
      • 2017-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多