Python __使用方法v lambda初始化
在初始化类中的属性时,是否有理由避免使用lambda表达式或列表理解,而首选方法,反之亦然 例如: 与 列表理解Python __使用方法v lambda初始化,python,methods,lambda,initialization,list-comprehension,Python,Methods,Lambda,Initialization,List Comprehension,在初始化类中的属性时,是否有理由避免使用lambda表达式或列表理解,而首选方法,反之亦然 例如: 与 列表理解 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, li
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
(请注意,这些可能不是最好的例子,所需的处理可能要复杂得多)
有没有更好的方法?初始化过程是否达到了需要拆分新方法的适当复杂性?只需添加到@NPE注释中(因为我确实同意他的说法) 是否有理由避免使用lambda表达式或列表理解,而更倾向于使用方法,反之亦然 答案是肯定和否定 我模棱两可的回答是现实存在的结果,选择wathever更适合你的具体案例
现在,观点补充说,对于你上面的例子,我认为你的Lambda解决方案很难得到支持。乍一看,很难真正了解正在发生的事情。因此,我建议选择方法选项或列表理解(这将是我的GOTO解决方案)。我的经验法则是:设身处地地为不熟悉代码的读者着想,你的方法
genData
应该是@staticmethod
或类外函数。@PatrickHaugh你关于静态的看法是对的,更新了
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