[Python] Функция двойного назначения (generator/callback)
От: jazzer Россия Skype: enerjazzer
Дата: 04.05.20 12:54
Оценка:
Приветствую, коллеги!

Возник вопрос — можно ли написать функцию в Питоне, которая будет себя вести, в зависимости от аргумента, либо как генератор, либо как функция с коллбэком?
Что-то вроде:
def f(cb=None):
  x=1
  что-то(x, cb)
  x=2
  что-то(x, cb)

где "что-то" — это либо yield x, если cb is None, либо cb(x)
Соответственно, я ее зову либо
for x in f(): print(x)

либо
f(cb=print)

и в том, и в другом случае она должна напечатать 1 и 2.

Функция f длинная, поэтому писать две версии, различающихся только yield/cb, не хочется (ну и вообще, DRY)
Интересует не только Python3, но и Python2, потому что основная кодовая база до сих пор на 2.7.

(Сейчас складывается впечатление, что если в тексте функции есть yield, то функция автоматически становится генератором, независимо ни от чего вообще, даже если этот yield гарантированно ни разу не позовется)
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
python yield callback generators
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.