将值设置为变量的单行lambda函数

问题描述 投票:0回答:1

创建像这样设置变量obj.x的回调函数:

def f(button, callback):
    pass

def callback1():
    obj.x = 1
def callback2():
    obj.x = 2

class Obj: 
    pass
obj = Obj()
f('abc', callback2)
f('def', callback1)

是多余的,可以替换为:

def xsetter(value):
    obj.x = value

f('abc', lambda: xsetter(1))
f('def', lambda: xsetter(2))

问题:是否有更简单的方法,而不必为x定义setter?是否可能类似于以下内容?

f('abc', lambda: obj.x = 1)
f('def', lambda: obj.x = 2)

这里会产生错误:

SyntaxError:lambda无法包含分配

python variables lambda
1个回答
5
投票
在lambda表达式中(干净地)不可能<]。但是,您正在分配给

attribute,由setattr函数处理。

f('abc', lambda: setattr(obj, 'x', 1)) 您还可以使用functools.partial“部分”将对象的__setattr__方法应用于所需的参数。
from functools import partial

f('abc', partial(obj.__setattr__, 'x', 1))
© www.soinside.com 2019 - 2024. All rights reserved.