在Python中向lambda添加方法

时间:2012-10-16 22:59:54

标签: python lambda

我想在python中做这样的事情:

(lambda: ... some code ...).valueHandling(...some parameters)

也就是说,我希望使用名为function的新方法扩展valueHandling类型。 我尝试了不同的东西:

1)

def valueHandling(self):
  ...

function.valueHandling=valueHandling

2)

function.__class__.__dict__['valueHandling']=valueHandling

3)等

没有工作...... 有办法吗?要添加一个方法来运行,所有'lambdas'都可以响应该方法吗?

由于

2 个答案:

答案 0 :(得分:0)

CPython不允许这样做:

TypeError: can't set attributes of built-in/extension type 'function'

(如果您尝试使用.__dict__方法...)

TypeError: 'dictproxy' object does not support item assignment

这是因为这些类型是用C语言实现的,并且具有交易灵活性。

答案 1 :(得分:0)

您可以设置单个(function / lambda / etc ..)对象的属性:

l = lambda x: x*2
def fun():
  return 1
l.f = fun
l.f()
1

您无法为所有功能执行此操作 - 您必须手动将其添加到每个

中。

您可以编写一个简短的包装器,然后mylambda(lambda x: ...)

def mylambda(x):
  x.f = fun
  return x