Устранение неполадок распечатки списка в соответствии с индивидуальными требованиями - PullRequest
3 голосов
/ 11 июля 2019

Я пытаюсь распаковать какой-то список, который я получил в функции get_item().Я знаю, что могу получить желаемый результат, если бы я использовал return вместо yield.

Я пытался:

def get_item():
    yield ["k","y","t"]

if __name__ == '__main__':
    for item in get_item():
        print(item)

Вывод, который я получаю:

['k', 'y', 't']

Вывод, который я хочу получить:

k
y
t

Какое возможное изменение я должен добиться, чтобы получить желаемый результат, сохраняя yield как есть?

Ответы [ 3 ]

9 голосов
/ 11 июля 2019

Начиная с Python 3.3, вы можете использовать yield from:

def get_item():
    yield from ["k","y","t"]

if __name__ == '__main__':
    for item in get_item():
        print(item)

Вывод:

k
y
t

yield from - это новый трюк, введенный вPython 3.3, краткая его часть:

Для простых итераторов выход из итерируемого - это просто сокращенная форма для элемента в итерируемом: yield item:

(акцент мой)

1 голос
/ 11 июля 2019

Желаемый результат вы можете получить с помощью оператора *:

def get_item():
    yield ["k","y","t"]

if __name__ == '__main__':
    print('\n'.join(*get_item()))

Печать:

k
y
t
0 голосов
/ 11 июля 2019

Попробуйте ниже:


def get_item():
    for _ in ["k","y","t"]:
        yield  _

if __name__ == '__main__':
    for item in get_item():
        print(item)
...