Практическое применение f((yield x))?

Какое полезное применение может быть для следующей конструкции?
>>> def f(val):
...     return "Hi"
>>> x = [1, 2, 3]
>>> list(f((yield a)) for a in x)
[1, 'Hi', 2, 'Hi', 3, 'Hi']
(Пример взят отсюда: stackoverflow.com/a/15956157/4580246)
  • Вопрос задан
  • 559 просмотров
Пригласить эксперта
Ответы на вопрос 2
@some1else
Когда вам нужно создать "плоский" итератор, из которого поочерёдно вылетают аргументы/результат некоторой функции.
# coding=utf-8

def f(x):
    return u',\n {}.\n'.format(x.lower())

print(u''.join(f((yield i) or i) for i in [
    u'Ветер с моря дул',
    u'Нагонял беду',
    u'И сказал ты мне',
    u'Больше не приду'
]))
Ответ написан
bobrovskyserg
@bobrovskyserg
Ну и чудище. Похоже на косяк Guido.
"there is no reason to do it this way".

UPDATE
так чуть длиннее, но не вызывает у меня отвращения:
>>> from itertools import chain
>>> def f(val):
...     return "Hi"
... 
>>> list(chain.from_iterable((a, f(a)) for a in [1, 2, 3]))
[1, 'Hi', 2, 'Hi', 3, 'Hi']
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы