web-dev-qa-db-ja.com

なぜPython言語にはwriteln()メソッドがないのですか?

ファイルに新しい行を書き込む必要がある場合は、次のようにコーディングする必要があります。

_file_output.write('Fooo line \n')
_

Pythonにwriteln()メソッドがない理由はありますか?

21
systempuntoout

fileメソッドの対称インターフェースを提供するために、またwriteln()が意味をなさないため、省略されました。

  • read()write()と一致します:どちらも生データを操作します
  • readlines()writelines()と一致します:どちらもEOLを含む回線で動作します
  • readline()はめったに使用されません。イテレータは同じ仕事をします(オプションのsizeパラメータを除く)

writeline()(またはwriteln())は、EOLを追加しないため(write()の動作に一致するため)、基本的にwritelines()と同じになります。 )] _)。

printをファイルに模倣する最良の方法は、Python 2.xまたはfileキーワード引数の特別なprint-to-file構文を使用することです。ダニエルが提案したように、print()関数の。

個人的には、file.write('...\n')よりもprint >>file, ...構文の方が好きです。

11
efotinis

Python 2、使用:

print >>file_output, 'Fooo line '

Python 3、使用:

print('Fooo line ', file=file_output)
23

私はそうすべきだと感じています。使用できる最も近いものは次のとおりです。

file_output.writelines([foo_msg, '\n'])
5
Daniel Reis

print()はあなたが探している関数です。 Pythonのコアポリモーフィズムの多くと同様に、印刷はメソッドを使用する代わりに組み込み関数によって提供されます(len()next()repr()などのように! )。

ユニバーサルインターフェイスであるprint()関数は、ファイルオブジェクト自体に実装しなくても、より用途が広くなります。この場合、デフォルトで改行で終了しますが、関数呼び出しで選択できます。次に例を示します。

_print("text", file=sys.stderr, end="\n")
_

提案されたユースケースでは、すべてのファイルオブジェクトは.write()メソッド(現在はprint()で使用されています)だけでなく、.writeln()も実装する必要があり、場合によってはもっと!この関数ベースのポリモーフィズムにより、インターフェイスに負担をかけることなく、pythonが非常に豊富になります(ダックタイピングの仕組みを覚えておいてください)。

注:このモデルは常にPythonの中心にあります。私の例では、Pythonに関係するのはより純粋です。

2
u0b34a0f6ae

おそらく本当の理由はありません。必要なときに改行を書くのが本当に簡単だからです。それを行うためだけに、追加のメソッドでファイルインターフェイスを乱雑にするのはなぜですか。

0
Ned Batchelder