在类中初始化属性时,是否有理由避免使用lambda表达式或列表推导,而倾向于使用方法,反之亦然?
例如: 使用
class Foo():
def __init__(self, data):
self.data = data
列表理解
class BarListComp():
def __init__(self, listOfFoo):
self.data = [fooInst.data for fooInst in listOfFoo if fooInst.data % 2 == 0]
Lambda
class BarLambda():
def __init__(self, listOfFoo):
self.data = list(filter(lambda x: x % 2 == 0, map(lambda y: y.data, listOfFoo)))
方法
class BarMethod():
def __init__(self, listOfFoo):
self.data = self.genData(listOfFoo)
@static_method
def genData(listOfFoo):
# this could also just be the earlier list comprehension
listOut = []
for elem in listOfFoo:
if elem.data % 2 == 0:
listOut.append(elem.data)
return listOut
(请注意,这些可能不是最好的示例,所需的处理可能会更加复杂)
有首选的方法吗?初始化过程是否达到了适当的复杂度,因此有必要拆分一种新方法?
答案 0 :(得分:0)
只需在@NPE评论中添加(因为我确实同意他的说法),
是否有理由避免使用lambda表达式或列表推导,而倾向于使用方法,反之亦然?
答案是是和否。
我的模棱两可的答案是现实的结果,根据您的具体情况选择
现在,舆论支持者,对于您的上述示例,我认为支持Lambda解决方案几乎是无可争辩的。乍一看,很难真正掌握正在发生的事情。所以我会说选择方法选项或列表理解(这将是我的GOTO解决方案)。