Используйте map
только для функций без побочных эффектов (например, print
). То есть используйте его только для функций, которые просто что-то возвращают. В этом случае обычный цикл более идиоматичен:
for f in lst:
f("event_info")
Редактировать : также, начиная с Python 3.0, map
возвращает итератор вместо списка. Следовательно, в Python 3.0 код, приведенный в вопросе, не будет вызывать любую функцию, если только все элементы в генераторе не будут оценены явно (например, путем инкапсуляции вызова к map
внутри list
). К счастью, инструмент 2to3 предупредит об этом:
Файл map.py
:
map(lambda x: x, range(10))
2to3-3.0 map.py
вывод:
RefactoringTool: Skipping implicit fixer: buffer
RefactoringTool: Skipping implicit fixer: idioms
RefactoringTool: Skipping implicit fixer: set_literal
RefactoringTool: Skipping implicit fixer: ws_comma
--- map.py (original)
+++ map.py (refactored)
@@ -1,1 +1,1 @@
-map(lambda x: x, range(10))
+list(map(lambda x: x, list(range(10))))
RefactoringTool: Files that need to be modified:
RefactoringTool: map.py
RefactoringTool: Warnings/messages while refactoring:
RefactoringTool: ### In file map.py ###
RefactoringTool: Line 1: You should use a for loop here