3
3

More than 3 years have passed since last update.

print関数の便利な変数をデフォルト指定して活用する

Last updated at Posted at 2020-06-26

print関数にはいくつかの便利なオプションがある

# スペース以外で接続する
print("xxx", "yyyy", "zzzz", sep="-") # xxx-yyyy-zzzz

# 改行しない(改行コード以外で終わる)
print("xxx", end=" ")
print("yyyy", end=" ")
print("zzzz", end=" ") # xxx yyyy zzzz

# print実行時に強制的に出力させる
print("xxx", flush=True)

特に最後のflush=Trueは、python xxx.py > out.logのように出力ファイルを指定した時に、出力がなかなか書き込まれないデフォルト設定が解消される。

毎回オプションを入力するのが面倒

長いコードで複数箇所にprint()があるといちいちオプションを追加するのが面倒くさい。
そんなときは、関数への部分入力を行うfunctools.partialを使う。

import functools
print = functools.partial(print, flush=True)

これで、print()のなかで常にflush=Trueの状態になる。

念のため動作確認。

print_test.py
import time
# import functools
# print = functools.partial(print, flush=True)

for i in range(100):
    print(i)
    time.sleep(1)

このコードを、python print_test.py > out.logのように実行する。コメントアウトの部分を含めるか否かで、コード実行時にout.logが逐次更新されるかされないかが変わる。

編集後記

本記事を書いたら関連記事でコンソール出力の上書きが簡単にできる(リンク)ことを知ったのでやってみた。

print_test-console.py
import time
import functools
print = functools.partial(print, end="\r")

for i in range(100):
    print(i)
    time.sleep(1)

これで1秒ごとにコンソール出力の数字が上書きされる。すごい。
(ファイル出力では改行になってしまうので注意。)

3
3
1

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
3
3