Как мы с Вимом обсуждали в комментариях, не дает никаких преимуществ для этого конкретного случая.Если второй фрагмент кода будет эквивалентен первому фрагменту кода, он будет выглядеть примерно так:
with open('mydata.txt') as fp:
for line in fp:
if line == '':
break
process_line(line)
Однако, единственный случай, когда с помощью readline
может быть возвращена пустая строка, находится в концефайл (EOF), поэтому теперь он имеет значение (другие строки содержат как минимум символ новой строки '\n'
).
Если бы вместо пустой строки использовалось другое значение, тогда разница была бы значимой.Лично я думаю, что документы должны использовать лучший пример, чтобы проиллюстрировать это, например:
>>> f = open('test')
>>> f.read()
'a\nb\nc\n\nd\ne\nf\n\n'
>>> f = open('test')
>>> [line for line in iter(f.readline, 'b\n')]
['a\n']
>>> f = open('test')
>>> [line for line in f]
['a\n', 'b\n', 'c\n', '\n', 'd\n', 'e\n', 'f\n', '\n']
(Обратите внимание, что я действительно должен закрывать дескрипторы файлов)
РЕДАКТИРОВАТЬ: я поднял этокак возможная ошибка документации в Issue34764