CHAPTER 3 · 9 lessons · 114問
関数
ひとまとまりの処理に名前をつけて、いつでも呼び出せるようにする。コードが「部品」になる章。
ここまでで書いたプログラムは、上から下へ一本道で流れていくものだった。それでも動くけれど、同じ処理が2か所に出てくると、直すときに2か所とも直さないといけない。3か所なら3か所。この「同じことを何度も書く」が、バグのいちばん太い水源になる。
関数は、その水源を止める道具だよ。ひとまとまりの処理に名前をつけて、呼びたいときに名前で呼ぶ。中身を直すのは1か所だけで済むし、名前を読めば何をするものか分かるので、コードが読みやすくなる。
Python では def と書いて関数を作る。def aisatsu(): と書き、その下に字下げして中身を書く。第1章でやったインデントが、ここで本格的に効いてくる。どこまでが関数の中身かを決めているのは、この空白の深さだよ。
関数には値を渡せる(引数)し、関数から値を受け取れる(返値)。def tashizan(a, b): と書けば2つの値を受け取れるし、return a + b と書けば結果を呼び出し側に返せる。この「渡して、受け取る」という形が分かると、プログラムは部品の組み合わせとして書けるようになる。
この章でいちばん大事なのは、たぶん print と return のちがいだ。どちらも「関数から何かが出てくる」ように見えるけれど、まったくの別物。print は人間に見せるもので、return はプログラムに渡すものだよ。print した値は他の計算に使えないし、return した値は書かなければ画面に出ない。ここを混ぜたまま先へ進むと、あとでどうしても行き詰まる。1レッスン使ってじっくり見よう。
スコープも扱う。関数の中で作った変数は、関数の外からは見えない。最初は不便に思えるけれど、これは守ってくれている仕組みだ。関数の中で使った i が、うっかり外の i を壊す——そういう事故が起きないようになっている。
章の後半では、キーワード引数と初期値を見る。aisatsu(namae="ゆい") のように名前を書いて渡せて、def aisatsu(namae="ゲスト"): のように「渡されなかったときの値」を決められる。Python のライブラリはこの書き方を前提に作られているので、覚えておくと他人のコードが急に読みやすくなるよ。
この章のレッスン
処理に名前をつける