01 / 07
同じことを何度も書いている
3回あいさつしたいとき、いまのあなたは print を3回書くしかない。
3回ならまだいい。でも同じ処理が10か所に散らばったあとで、おはよう を別の言葉に直すことになったら? 10か所ぜんぶを直すことになるし、1か所でも直し忘れたらバグだよ。
print("おはよう")print("おはよう")print("おはよう")実行結果
おはよう おはよう おはよう
関数
INPUT · スライド
01 / 07
3回あいさつしたいとき、いまのあなたは print を3回書くしかない。
3回ならまだいい。でも同じ処理が10か所に散らばったあとで、おはよう を別の言葉に直すことになったら? 10か所ぜんぶを直すことになるし、1か所でも直し忘れたらバグだよ。
print("おはよう")print("おはよう")print("おはよう")実行結果
おはよう おはよう おはよう
02 / 07
ひとまとまりの処理に名前をつけたものを 関数 と呼ぶよ。作るときは def(デフ)と書く。
def のうしろに関数の名前を書く() をつける: で閉じるif や for とまったく同じ「コロンと字下げ」の形だね。使うときは、名前のうしろに () をつけて呼ぶよ。
def aisatsu(): print("おはよう")aisatsu()実行結果
おはよう
03 / 07
ここが最初の関門。def を書いただけでは、中身は実行されない。
def は「こういう名前の処理があるよ」と Python に覚えてもらう行であって、やらせる行ではないんだ。下の例では おはよう は出てこないよ。
覚えてもらうのが def の行、やらせるのが aisatsu() の行。この2つはまったく別の仕事だよ。
def aisatsu(): print("おはよう")print("おわり")実行結果
おわり
04 / 07
関数のありがたみはここから。一度作っておけば、何度でも呼べるよ。
そして直したくなったら、直すのは関数の中の1か所だけ。呼んでいる場所が100か所あっても、直すのは1か所で済むんだ。
def aisatsu(): print("おはよう")aisatsu()aisatsu()aisatsu()実行結果
おはよう おはよう おはよう
05 / 07
関数の中身がどこまでかを決めているのは、字下げの深さだけ。if のときとまったく同じだよ。
字下げを戻した行は、もう関数の外。下の例では ここは外 が先に表示される。def のかたまりは覚えてもらうだけで、呼ばれるまで動かないからだね。
def aisatsu(): print("おはよう") print("げんきですか")print("ここは外")aisatsu()実行結果
ここは外 おはよう げんきですか
06 / 07
順番にも決まりがある。def より前で呼ぶと NameError になるよ。
Python は上から順に読んでいくので、def の行を読むまでその名前を知らないんだ。関数は先に作ってから呼ぶ。
aisatsu()def aisatsu(): print("おはよう")実行結果
NameError: name 'aisatsu' is not defined
07 / 07
関数にすると、やりたいことの名前でコードが読めるようになる。
下の例は、shikiri の中身を知らなくても「区切りを引いているんだな」と分かるよね。中身を読まなくても意図が伝わる——これが名前をつける本当のごほうびだよ。
ただし、いまの関数はいつ呼んでも同じことしか言えない。次は呼ぶときに値を渡せるようにしよう。
def shikiri(): print("--------")shikiri()print("ごうけい 520")shikiri()実行結果
-------- ごうけい 520 --------