gpt4 book ai didi

Python Lambda 可变性

转载 作者:行者123 更新时间:2023-11-28 20:09:34 26 4
gpt4 key购买 nike

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 并打算将它们保存在字典中,因为它们将形成一个简单的指令集。据我所知,我需要使用 lambdaexec 来做我想做的事。

最佳答案

__add__ 不是inplace,所以TestClass.x的返回值是self.value + 100,但是self.值 没有改变。试试这个:

import random
HATE_LAMBDAS = random.choice(True, False)
class TestClass(object):
def __init__(self):
self.value = 100
if HATE_LAMBDAS:
def x():
self.value += 100
self.x = x
else:
self.x = lambda: setattr(self, "value", self.value + 100)
self.run()

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

t = TestClass()

#Output: 200

使用 setattr 增加值,同时仍然使用 lambda。但是请注意,python 中的 lambda 是其最糟糕的功能之一。但是,这两种方法都有效。

编辑

只是记住了一些您可能会觉得有用的东西!标准库有一个名为 operator 的模块它将标准运算符实现为函数。如果您计划大量使用 lambda,您可能想调查一下。

关于Python Lambda 可变性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10608956/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com