При инициализации атрибута в классе, есть ли причина избегать использования лямбда-выражения или понимания списка, предпочитая метод или наоборот?
В примере:
С
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
(Обратите внимание, что это могут быть не самые лучшие примеры, а необходимая обработка может быть гораздо более сложной)
Есть ли предпочтительный метод? Достигает ли процесс инициализации подходящей сложности, требующей разделения нового метода?