0

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

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

也就是说,我想function使用一个名为valueHandling. 我尝试了不同的东西,例如:

1)

def valueHandling(self):
  ...

function.valueHandling=valueHandling

2)

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

3)等

没有工作......有没有办法做到这一点?要添加一种方法以使所有“lambdas”都可以响应该方法吗?

谢谢

4

2 回答 2

0

您可以设置单个(函数/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
于 2012-10-16T23:17:21.867 回答
0

CPython 不允许这样做:

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

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

TypeError: 'dictproxy' object does not support item assignment

这是因为这些类型是用 C 实现的,并且以灵活性换取速度。

于 2012-10-16T23:05:56.630 回答