Python: print関数の仕様
print関数って、意識せず使ってたけどこんな仕様なんですねぇ 面白かったので、いくつか見てみましょう。
複数引数がとれて、一気にprintできる
複数引数を渡すと、スペースで区切られて出力される
# 複数引数を与えてみる print('str1', 'str2', 'str3') #> str1 str2 str3
セパレタも選択できる
複数引数を出力する際のデフォルトのセパレタはスペースですが、これも変えられる これって、Rでいうpasteとprintを両方兼ね添えた感じですね
# セパレタを変えてみる print('str1', 'str2', 'str3', sep=':') #> str1:str2:str3
ってことはlistをアンパックしたりすればこんな事もできますね
# リストをアンパックして渡して、全部の要素を接続 x = ['a', 'b', 'c'] print(*x, sep='') #> abc
引数渡さなくてもいい(笑)
何も引数を渡さないと、end仮引数でデフォルトで指定されている\n
改行が出力される。
endを指定することで、第1引数の出力後のお尻を何で締めくくるか決めれるみたい
# エラーにはならず、改行が出力(見えんけど) print() #> # end引数に値を渡すと、出力のお尻を何で締めくくるか決められる print('str1', end='end') #> str1end
出力先も変えられる
標準出力(sys.stdout)以外にもwrite(string) メソッドを持つオブジェクトならなんでも出力できるみたいです。 例えば普通にファイルにも出力できる
# out.txtファイルに`str`が出力されます with open('out.txt', 'w') as f: print('str', file=f)
flushオプションはわからん
バッファするかどうか、指定するみたいですが私にはわからなかったのでどう使うのか、誰か教えてください。
ドキュメントに書いてること
print(*objects, sep=‘ ’, end=‘\n’, file=sys.stdout, flush=False)
objects (単数でも複数でも可) を sep で区切りながらテキストストリーム file に表示し、最後に end を表示します。sep、end、file を与える場合、キーワード引数として与える必要があります。 キーワードなしの引数はすべて、 str() がするように文字列に変換され、 sep で区切られながらストリームに書き出され、最後に end が続きます。 sep と end の両方とも、文字列でなければなりません。これらを None にすると、デフォルトの値が使われます。 objects が与えられなければ、 print() は end だけを書き出します。 file 引数は、 write(string) メソッドを持つオブジェクトでなければなりません。指定されないか、 None である場合、 sys.stdout が使われます。表示される引数は全てテキスト文字列に変換されますから、 print() はバイナリモードファイルオブジェクトには使用できません。代わりに file.write(…) を使ってください。 出力がバッファ化されるかどうかは通常 file で決まりますが、flush キーワード引数が真ならストリームは強制的にフラッシュされます。 バージョン 3.3 で変更: キーワード引数 flush が追加されました。
ではごきげんよう。