3秒でわかる
プログラムが外の世界と値をやり取りする処理の総称。キーボードやファイル、ネットワークからの読み書きがこれにあたり、実用的なコードは必ず通ります。
もう少し詳しく
どういうものか
入出力 (I/O) は、プログラムの内側と外側で値を受け渡す処理の総称です。外側とは、キーボード、画面、ファイル、ネットワーク、データベースなどを指します。計算だけをしているプログラムは何の役にも立たないので、実用的なコードは必ずどこかで入出力に触れます。
name = input("名前を入力してください ") # 標準入力
print(f"こんにちは、{name}さん") # 標準出力
with open("memo.txt", "w", encoding="utf-8") as f:
f.write(name) # ファイル出力なぜ必要か
入出力が分かれていると、処理の本体をそのまま残したまま、入り口と出口だけを差し替えられます。キーボードから読んでいた部分をファイルに変えても、途中の計算は書き換えずに済みます。テストが書きやすいコードは、たいてい入出力と計算がきれいに分かれています。
つまずきやすいところ
input() が返すのは常に文字列です。数値として扱うには変換が要ります。
age = input("年齢 ")
print(age + 1) # TypeError
print(int(age) + 1) # これなら動くファイルの文字コードも定番の詰まりどころです。Windows で作った CSV を読むと、encoding を指定していない場合に文字化けや UnicodeDecodeError が出ます。encoding="utf-8" や encoding="cp932" を明示すると避けられます。
閉じ忘れも起きます。open して close を書かないと、書いた内容が途中までしか反映されないことがあります。with で開けば、例外が出ても自動で閉じます。
似た用語との違い
| 呼び名 | 中身 |
|---|---|
| 標準入力 | キーボードや、パイプで流し込まれた文字列 |
| 標準出力 | 通常の結果を出す先。print が書き込む場所 |
| 標準エラー出力 | エラーだけを分けて出す先 |
ネットワーク通信やデータベースへの問い合わせも、外部とのやり取りという意味では同じ入出力です。いずれも自分のプログラムの外にあるものを相手にするので、失敗する前提で書く必要があります。
標準出力と標準エラー出力が分かれているおかげで、python app.py > result.txt と書いたときに、結果だけをファイルに落として、エラーは画面に残す、という使い分けができます。
覚え方
入力は「外から中へ」、出力は「中から外へ」。基準は常に自分のプログラムです。