我这里有一个“最佳实践”问题。我使用的地图可能无法使用 - 使用列表的元素来更改不同对象的状态。最终的列表输出实际上没有改变。这个合适吗?
例如:
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)
答案 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都是表达式,表达式应该尽可能不带副作用,它们的目的是返回一个值。
因此,如果您没有返回值,则应使用简单语句:即显式