是否适合使用map(func,list)转换对象而不返回列表?

时间:2017-02-14 12:22:07

标签: python object dictionary

我这里有一个“最佳实践”问题。我使用的地图可能无法使用 - 使用列表的元素来更改不同对象的状态。最终的列表输出实际上没有改变。这个合适吗?

例如:

 class ToBeChanged(object):
      def __init__(self):
           self.foo_lst = [1,2,3,4]
      def mapfunc(self, arg):
           if arg in ['foo', 'bar']:
               self.foo_lst.append(arg)
           else:
               pass

 test = ToBeChanged()
 list_to_map = [1,2,37,'foo']

 map(lambda x: test.mapfunc(x), list_to_map)

2 个答案:

答案 0 :(得分:4)

这是不合适的。在Python 2中,您将创建一个与optionalDatiTelematico .map(DatiTelematico::getAdempimento) .map(Adempimento::getDatiNegozio) .flatMap(Example::sumImporto) // reference to method from 2nd code snippet .orElse(BigDecimal.ZERO); // what to do if we had Optional.empty at any point长度相同的新列表,并立即将其丢弃;浪费! list_to_map甚至使它变得更加复杂。

最好使用for循环:

lambda

更简洁,更易读。

如果您仍在考虑在Python 3中使用它(通过强制以某种方式评估 lazy object ),请考虑那些将维护您的代码的人; for x in list_to_map: test.mapfunc(x) 给出了您想要从列表中创建新迭代的印象。

答案 1 :(得分:2)

地图是最糟糕的。

因为如果你试图在python3中运行代码,它甚至不会执行调用,因为在python3 map中是懒惰的。

在任何情况下,调用map或list-comprehension都是表达式,表达式应该尽可能不带副作用,它们的目的是返回一个值。

因此,如果您没有返回值,则应使用简单语句:即显式