CHAPTER 3 · 9 lessons · 114問

関数

ひとまとまりの処理に名前をつけて、いつでも呼び出せるようにする。コードが「部品」になる章。

0 / 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 のライブラリはこの書き方を前提に作られているので、覚えておくと他人のコードが急に読みやすくなるよ。

この章のレッスン

処理に名前をつける

  1. 45名前をつけて呼び出すひとまとまりの処理に名前をつけるのが def。定義しただけでは動かないのが最初の関門だよ。問題へ
  2. 46値を渡して呼ぶカッコの中に名前を書くと、呼ぶたびにちがう値を渡せるようになるよ。問題へ
  3. 47答えを返してもらうreturn と書くと、関数が答えを持ち帰ってくれる。その値は変数に入れたり計算に使ったりできるよ。問題へ
  4. 48見せるのか、渡すのかprint は人間に見せる、return はプログラムに渡す。この章でいちばん大事な区別だよ。問題へ
  5. 49引数を2つ以上渡すカンマで並べれば何個でも受け取れる。ただし順番が意味を持つのを忘れずに。問題へ

関数の中と外

  1. 50関数の中だけの名前関数の中で作った変数は、外からは見えない。不便に見えて、じつは守ってくれている仕組みだよ。問題へ
  2. 51名前を書いて渡すaisatsu(namae="ゆい") のように名前をつけて渡すと、順番を気にしなくてよくなるよ。問題へ
  3. 52渡されなかったときの値def aisatsu(namae="ゲスト"): と書くと、渡さなかったときの値を先に決めておけるよ。問題へ
  4. 53どこを関数にするか第3章の総合演習。新しい文法は出てこない。基礎3問は無く、使い分けを考える練習10問だけだよ。問題へ

つぎは「まちがいと向き合う」。エラーを読み、原因を突きとめ、想定外に備える。ここを通ると、詰まっても自分で進めるようになる。