she*_*pez 2 python lambda pass-by-reference
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
Run Code Online (Sandbox Code Playgroud)
我想能够定义一个lambda函数,例如TestClass中的函数,并让它改变一个实例变量.似乎lambda的构造方式意味着它不会修改原始值.我怀疑这与Python的参考策略有关,我或多或少都了解它.
接受我所做的缺陷,是否有类似的方法来获得类似的功能?我最终需要定义许多方法,x并打算将它们保存在字典中,因为它们将形成一个简单的指令集.据我所知,我需要使用lambdas或exec做我想做的事.
__add__不在原地,所以返回值TestClass.x是self.value + 100,但self.value不会改变.试试这个:
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
Run Code Online (Sandbox Code Playgroud)
使用setattr在仍使用lambda的同时递增值.请注意,python中的lambda是其最糟糕的功能之一.但是,这两种方法都有效.
只是重新编写一些你可能会觉得有用的东西!标准库有一个名为operator的模块,它将标准运算符实现为函数.如果你打算经常使用lambdas,你可能想调查一下.