tg-me.com/pyproglib/6709
Last Update:
💡 Шпаргалка: функция с `yield` всегда возвращает генератор
Если в функции присутствует хотя бы один yield, Python преобразует её в генератор — независимо от того, выполнится ли yield при вызове.
Обычное поведение с возвращением списка:
def greet(as_list: bool):
message = 'hello!'
if as_list:
message_list = []
for char in message:
message_list += char
return message_list
else:
return message
>>> greet(as_list=True)
['h', 'e', 'l', 'l', 'o', '!']
>>> greet(as_list=False)
'hello!'
А вот что происходит, если использовать генератор с
yield
:def greet(as_generator: bool):
message = 'hello!'
if as_generator:
for char in message:
yield char
else:
return message
>>> greet(as_generator=True)
<generator object greet at 0x0000023F0A066F60>
>>> greet(as_generator=False)
<generator object greet at 0x0000023F0A066F60>
Даже при
as_generator=False
функция всё равно возвращает объект генератора. Это связано с тем, что наличие yield в теле функции делает её генераторной на уровне определения.📌 Это важно учитывать при проектировании логики, особенно если ожидается обычное значение, а не итератор.
Библиотека питониста #буст
BY Библиотека питониста | Python, Django, Flask

Share with your friend now:
tg-me.com/pyproglib/6709