TransWikia.com

Почему функция всегда возвращает generator объект python3

Stack Overflow на русском Asked on November 5, 2021

Допустим, у меня есть функция func, с параметром need_list. Если он равен True, то функция возвращает саму себя в виде списка, иначе возвращает generator объект. Но почему-то она всегда возвращает generator объект. Почему?

def func(need_list=False):
    if(need_list):
        return list(func())
    #какие-то действия...
    for i in range(10000000000000):
        yield i+123
>>> func(True) #-> <generator object func at 0x000012121>

One Answer

По сути наличие yield внутри функции делает ее генератором, независимо от того, выполняется ли yield хоть раз или нет. Можно обернуть yield во внутреннюю функцию:

def func(need_list=False):
    def subfunc():
        # какие-то действия...
        for i in range(100):
            yield i+123

    if(need_list):
        return list(subfunc())
    else:
        return subfunc()


print(func(True))
print(func())

Вывод:

[123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222]
<generator object func.<locals>.subfunc at 0x7fd1a5482c10>

Answered by insolor on November 5, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP