LoginSignup
0
1

More than 1 year has passed since last update.

Python printについてメモ

Posted at

Pythonのprintの多機能さ

C言語経由でPythonを学んでいます。
この記事は自分用のメモとしてつらつらと書いているものになります。

print関数がC言語のprintf関数とけっこう異なっているのでdocumentを読んでみました。

Documentの説明

print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)

objectssep で区切りながらテキストストリーム file に表示し、最後に end を表示します。

sependfileflush を与える場合、キーワード引数として与える必要があります。

キーワードなしの引数はすべて、 str() がするように文字列に変換され、 sep で区切られながらストリームに書き出され、最後に end が続きます。sepend の両方とも、文字列でなければなりません。

これらを None にすると、デフォルトの値が使われます。
objects が与えられなければ、 print()end だけを書き出します。

file 引数は、 write(string) メソッドを持つオブジェクトでなければなりません。
指定されないか、 None である場合、 sys.stdout が使われます。
表示される引数は全てテキスト文字列に変換されますから、 print() はバイナリモードファイルオブジェクトには使用できません。代わりに file.write(...) を使ってください。

出力がバッファ化されるかどうかは通常 file で決まりますが、flush キーワード引数が真ならストリームは強制的にフラッシュされます。

バージョン 3.3 で変更: キーワード引数 flush が追加されました。

Pythonにおけるオブジェクト

file 引数は、 write(string) メソッドを持つオブジェクトでなければなりません。

C言語にはオブジェクトという考え方がないので、戸惑いました。

Pythonにおけるオブジェクトとは以下のような定義です。

object
(オブジェクト) 状態 (属性や値) と定義された振る舞い (メソッド) をもつ全てのデータ。もしくは、全ての 新スタイルクラス の究極の基底クラスのこと。

組み込み関数 — Python 3.9.4 ドキュメント
3. データモデル — Python 3.9.4 ドキュメント

file 引数は、 write(string) メソッドを持つオブジェクトでなければなりません。

というのは、write関数を持つクラスのインスタンスを指しているようです。

Pythonを理解するには、オブジェクトとはなにか、ということを毎回注目していけばいい感じに学習が進みそうという手応えを得ました。

リストを出力する際に使えるアンパックを使った書き方

ここらへんのテクニック的な書き方は、その都度、出会うたびに習得していくしかなさそうです。

アンパックとは、パックの逆なので、展開のことです。

引数がすでにリストやタプルになっていて、個別な位置引数を要求する関数呼び出しに渡すためにアンパックする必要がある場合には、逆の状況が起こります。
例えば、組み込み関数 range() は引数 start と stop を別に与える必要があります。
個別に引数を与えることができない場合、関数呼び出しを * 演算子を使って書き、リストやタプルから引数をアンパックします。

4. その他の制御フローツール — Python 3.9.4 ドキュメント

アンパックを使わない書き方

def writeNew(tl):
    with open('newtext.txt', 'w') as f:
        for i in tl:
            f.write(f"{i}\n")

アンパックを使った書き方

def writeNew(tl):
    with open('newtext.txt', 'w') as f:
        print(*tl, file=f, sep='\n')

参考

Python3.xのアスタリスク逆引き - Qiita

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1