【问题标题】:Python Lambda MutabilityPython Lambda 可变性
【发布时间】:2023-04-06 03:39:02
【问题描述】:

class TestClass(object):
    def __init__(self):
        self.value = 100
        self.x = lambda: self.value.__add__(100)
        self.run()

    def run(self):        
        self.x()
        print self.value

t = TestClass()

#Output: 100

我希望能够定义一个 lambda 函数,例如 TestClass 中的那个,并让它改变一个实例变量。似乎 lambda 的构造方式意味着它不会修改原始值。我怀疑这与我或多或少理解的 Python 的参考策略有关。

所以接受我所做的缺陷,有没有类似的方法来获得类似的功能?我最终需要定义许多方法,例如x,并打算将它们保存在字典中,因为它们将形成一个简单的指令集。据我所知,我需要使用 lambdas 或 exec 来做我想做的事。

【问题讨论】:

  • 您确定需要使用 lambdas 吗?没有理由不能在字典中存储对使用 def 语句定义的函数的引用。
  • @chepner 从这个意义上说,我不需要使用lambda,但如果我能这样做,源代码将更具可读性。好吧,它至少在我看来更具可读性。
  • 如果方法很短,你总是可以在一行写def x(self): return something。如果您发布一些用于将方法存储在字典中的代码,我们可以确定 lambda 是否真的必要或有用。

标签:
python
lambda
pass-by-reference