0

Pythonで次のようなことをしたい:

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

つまり、functionという新しいメソッドで型を拡張したいと考えていvalueHandlingます。私は次のような別のことを試しました:

1)

def valueHandling(self):
  ...

function.valueHandling=valueHandling

2)

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

3) など

どれもうまくいきませんでした...それを行う方法はありますか? 関数にメソッドを追加して、すべての「ラムダ」がそのメソッドに応答できるようにするには?

ありがとう

4

2 に答える 2

0

個々の (関数/ラムダ/など) オブジェクトのプロパティを設定できます。

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 に答える