関数

INPUT · スライド

名前をつけて呼び出す

01 / 07

同じことを何度も書いている

3回あいさつしたいとき、いまのあなたは print を3回書くしかない。

3回ならまだいい。でも同じ処理が10か所に散らばったあとで、おはよう を別の言葉に直すことになったら? 10か所ぜんぶを直すことになるし、1か所でも直し忘れたらバグだよ。

print("おはよう")print("おはよう")print("おはよう")

実行結果

おはよう
おはよう
おはよう

02 / 07

def で名前をつける

ひとまとまりの処理に名前をつけたものを 関数 と呼ぶよ。作るときは def(デフ)と書く。

  • def のうしろに関数の名前を書く
  • 名前のうしろに () をつける
  • 行の終わりを : で閉じる
  • 次の行からスペース4つ下げて、やることを書く

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