pathlib path.glob повторяющиеся результаты для l oop вопроса - PullRequest
0 голосов
/ 05 апреля 2020
from pathlib import Path, PureWindowsPath

path=Path(PureWindowsPath('c:/test'))
print(file for file in path.glob('*.*'))
print("\n")
for file in path.glob('*.*'):print(file)

Я учусь нубу python, я не могу понять разницу между циклами и результатом. Я получаю объект генератора в одном и имена файлов в другом.

результат:

<generator object <genexpr> at 0x000002D8446B3970>


c:\test\Changes.xlsx
c:\test\North Accounts V1.1.xlsx
c:\test\North Customer Contact Details.xlsx
c:\test\Py_Test.xlsx

Процесс завершен с кодом выхода 0

Ответы [ 2 ]

2 голосов
/ 05 апреля 2020

Причина в том, что этот синтаксис: (x for x in [1, 2, 3]) создает объект генератора.

В отличие от этого: [x for x in [1, 2, 3]]

создает список.

Когда вы Напечатайте генератор напрямую, вы не увидите его содержимое. Вы можете сделать это вместо этого:

print([file for file in path.glob('*.*')])

или

print(list(file for file in path.glob('*.*')))

Оператор list ничего не делает, но потребляет итерацию ( и генератор является итеративным) и возвращает результат в виде списка.

1 голос
/ 06 апреля 2020

path.glob является итеративным, а ваше выражение file for file in path.glob(..) делает итерируемое из итерируемого. Это не нужно, но также дает неверный результат, поскольку при его печати вы получаете строковое представление iterable (что является этим странным числом), а не элементов, по которым он повторяется.

...