Почему язык Python не имеет метода writeln()?
Если нам нужно написать новую строку в файл, мы должны ввести код:
file_output.write('Fooo line \n')
Есть ли причины, по которым у Python нет метода writeln()
?
Ответы
Ответ 1
Было отказано в предоставлении симметричного интерфейса методов file
, и поскольку a writeln()
не имеет смысла:
-
read()
соответствует write()
: оба они работают с необработанными данными
-
readlines()
соответствует writelines()
: они работают на строках, включая их EOL
-
readline()
редко используется; итератор выполняет одно и то же задание (за исключением необязательного параметра size
)
A writeline()
(или writeln()
) будет по существу таким же, как write()
, поскольку он не добавит EOL (чтобы соответствовать поведению writelines()
).
Лучший способ подражать print
в файле - использовать специальный синтаксис print-to-file для Python 2.x или аргумент ключевого слова file
функции print()
, как предположил Даниэль.
Лично я предпочитаю синтаксис print >>file, ...
над file.write('...\n')
.
Ответ 2
В Python 2 используйте:
print >>file_output, 'Fooo line '
В Python 3 используйте:
print('Fooo line ', file=file_output)
Ответ 3
print()
- это функция, которую вы ищете. Как и большая часть основного полиморфизма в python, печать обеспечивается встроенной функцией, а не с использованием методов (например, len()
, next()
, repr()
и т.д.!).
Функция print()
, являющаяся универсальным интерфейсом, также делает ее более универсальной, без того, что сами объекты файлов должны ее реализовать. В этом случае по умолчанию он заканчивается символом новой строки, но его можно выбрать в вызове функции, например:
print("text", file=sys.stderr, end="\n")
В вашем предполагаемом прецеденте все объекты файлов должны реализовать не только метод .write()
(теперь используемый print()
), но также .writeln()
и, возможно, даже больше! Этот функциональный полиморфизм делает python очень богатым, не обременяя интерфейсы (помните, как работает утиная печать).
Примечание. Эта модель всегда была в центре Python. Это только более чисто в моих примерах, относящихся к Python 3
Ответ 4
Я чувствую, что так и должно быть. Самое близкое, что вы можете использовать:
file_output.writelines([foo_msg, '\n'])
Ответ 5
Наверное, нет реальной причины, просто очень легко написать новую строку, когда вам это нужно, поэтому зачем загромождать интерфейс с дополнительным методом, чтобы это сделать?