如何使我的代码更Pythonic?

时间:2012-12-05 14:46:04

标签: python

我尝试将函数定义为尽可能短,并且如果test始终为true则返回True的函数,如果有某些值为false则返回false。我试过了:

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

它不起作用。如何定义这样的函数?

我想只在一行上定义它。


2 个答案:

答案 0 :(得分:8)

怎么样:

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

或者

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

正如Vladimir在评论中提到的那样,test实际上是一个名为v的对象的方法,所以它应该是:

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

您可能希望将List作为参数传递。


查看documentation for the all methodone for the map methodlambda functions

答案 1 :(得分: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命名。