Быстрый взгляд и похоже, что я перезаписываю переменную каждой строкой, которую читаю ...
Почему это так?Вы видите with
как while
?Я привык к первому, и на первый взгляд мне кажется, что он просто: вызов readlines()
для чтения всего файла.
Где я могу быстро увидетьНа первый взгляд, я создал список сотрудников, и я читаю в каждой строке и добавляю к List
.
Когда я вижу явные циклы for
и while
, которые работают один элемент или одинПостепенно я впервые подумал: «Выглядит как программист на C ++ или Java, который не привык к Python».Это привычка, из которой вы должны избавиться.В Python часто есть более идиоматический подход, использующий массовые операции, списки или генераторы, которые избегают обязательного цикла старой школы.
Мне нравится второй подход, хотя он немного больше кода, понятночто я делаю, хотя при первом подходе не совсем понятно, пока вы не осмотрите его дальше.
Как опытный программист Python, я предпочитаю первый.Если вы хотите прочитать файл в память, вы звоните readlines()
.Он делает то, что говорит на жестяной банке.
Тем не менее, я также хотел бы спросить, является ли чтение всего файла в память правильным решением.Возможно, вам следует обрабатывать его построчно, не разжевывая целую кучу памяти.В этом случае идиоматическим решением действительно является петля for
.Но не тот, в котором вы просто добавляете все элементы в список.
with open(file) as f_obj:
for line in f_obj:
process_line(line.strip())
В качестве альтернативы, если важно удалить пробел и вы хотите прочитать все в память, рассмотрите понимание списка.
with open(file) as f_obj:
employees = [line.strip() for line in f_obj]