2013-09-25 2 views
-1

Мне интересно, есть ли более «лаконичный» или питонический способ сделать это.Функция вызова для каждого элемента в iterable

foo = range(10) 
def bar (num): 
    if num > 5: 
     print "Num >5" 
map(bar, food) 

Это грубое представление о том, что я делаю, кроме foo списка объектов идентификаторов и bar действительно bar.delay, потому что это задача сельдерея.

Сейчас этот работает, но имеет побочный эффект при создании списка результатов (всего None). Есть ли другой способ сделать это иначе, чем цикл for?

+1

для цикла является самым Pythonic, но если вам действительно надоедает этот метод, см. Мою функцию xmap в вопросе, который я задал здесь: http://stackoverflow.com/questions/18994471/why-is-my-xmap-function -not-any-faster-than-built-in-map – Shashank

ответ

3

Что случилось с петлей ?:

for item in foo: 
    bar(item) 

Конечно, если вы хотите получить фантазии, вы могли бы сделать генератор gen = (bar(item) for item in foo) или использовать itertools.imap, а затем использовать consume рецепт от itertools ...

+0

Потому что мне не нравятся две линии, разбросанные по моему коду. Чувствует себя плохо, когда я привык к таким вещам, как генераторы и списки. Но, учитывая результаты работы Shashank, я пойду с циклом for. –

+0

Понятия и функции, подобные карте, предназначены для создания некоторого объекта (списка или генератора и т. Д.). Если вы просто хотите итерации через объект и что-то делать, но ничего не построить, то for-loop всегда является самым чистым решением. – mgilson

Смежные вопросы