-1

私は関数をできるだけ短く定義しようとしています。関数testは常にtrueの場合はTrueを返し、falseの値がある場合はfalseを返します。私はそうしようとしました:

def res(v): for d in List: return True if v.test(d) else: pass

それは動作しません。そのような関数を定義する方法は?

1行だけで定義したい。


4

2 に答える 2

8

どうですか:

res = lambda x: all(test(v) for v in x) 

または

res = lambda x: all(map(test, x))

Vladimirがコメントで述べているように、yourtest実際にはと呼ばれるオブジェクトのメソッドであるvため、実際には次のようになります。

lambda v: all(map(v.test, List)) # You should not use List as a variable name!

Listただし、おそらく引数としても渡したいと思うでしょう。


メソッドのドキュメント、メソッド関数ドキュメントをallご覧ください。maplambda

于 2012-12-05T14:49:47.327 に答える
1

これはあなたが望むものに近いです:

def res(v, values):
    return all(v.test(d) for d in values)

これも機能します:

def res(v, values):
    return filter(v.test, values) == values

上記のように、変数に名前を付けないでくださいlist

于 2012-12-05T15:54:11.343 に答える