Используйте map
только для функций без побочных эффектов (например, print
). То есть, используйте его только для функций, которые просто что-то возвращают. В этом случае обычный цикл более идиоматический:
for f in lst:
f("event_info")
Edit: также, как и в 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
См. Также: http://stackoverflow.com/questions/1785867/efficient-way-of-calling-set-of-functions-in-python/1785905#1785905 – Stephan202