関数

INPUT · スライド

値を渡して呼ぶ

01 / 07

いつ呼んでも同じことしか言えない

前のレッスンで作った関数は、何度呼んでも同じことしか言えなかった。

でも本当は「ゆいさん、こんにちは」「そうさん、こんにちは」のように、相手によって変えたいよね。そのために、関数には値を渡せるようになっているんだ。

def aisatsu():    print("こんにちは")aisatsu()aisatsu()

実行結果

こんにちは
こんにちは

02 / 07

カッコの中に名前を書く

これまで空っぽだった () の中に名前を書くと、呼ぶときに値を渡せるようになるよ。

渡した値は、その名前で関数の中から使える。下の例では namae がその名前。aisatsu("ゆい") と呼べば、関数の中の namae は "ゆい" になるんだ。

def aisatsu(namae):    print(f"{namae}さん、こんにちは")aisatsu("ゆい")aisatsu("そう")

実行結果

ゆいさん、こんにちは
そうさん、こんにちは

03 / 07

渡す値と受け取る名前

関数に渡す値のことを 引数(ひきすう)と呼ぶよ。渡す側と受け取る側で言葉が分かれている。

  • def のカッコに書く namae … 受け取る名前。「仮引数」と呼ぶ
  • 呼ぶときに書く "ゆい" … 渡す値。「実引数」と呼ぶ

言葉は覚えなくていい。大事なのは、カッコに書いた名前に、渡した値が入るという一点だけだよ。

def nibai(kazu):    print(kazu * 2)nibai(5)nibai(100)

実行結果

10
200

04 / 07

変数を渡してもいい

渡すのは書いた値そのものでなくていい。変数でも、計算した結果でも渡せるよ。

渡されるのは変数の名前ではなく、中に入っていた値。だから関数の中の名前と外の名前が違っていてもかまわないんだ。

def nibai(kazu):    print(kazu * 2)nedan = 150nibai(nedan)nibai(nedan + 50)

実行結果

300
400

05 / 07

くり返しと組み合わせる

リストを回しながら1件ずつ渡せば、同じ処理を全員ぶんに効かせられる。

関数の中身は1回しか書いていないのに、3人ぶんのあいさつができた。ここでも、回している変数の名前は hito、受け取る名前は namae で違っている。入った値だけが渡るからだよ。

def aisatsu(namae):    print(f"{namae}さん、こんにちは")namaes = ["ゆい", "そう", "はる"]for hito in namaes:    aisatsu(hito)

実行結果

ゆいさん、こんにちは
そうさん、こんにちは
はるさん、こんにちは

06 / 07

渡し忘れるとエラー

受け取る名前を1つ書いたら、呼ぶときも必ず1つ渡す。忘れると TypeError で止まるよ。

エラーの文は長いけれど、読めば全部書いてある。missing 1 required positional argument は「必要な引数が1つ足りない」。うしろに出ているのが足りない名前だよ。

def aisatsu(namae):    print(f"{namae}さん、こんにちは")aisatsu()

実行結果

TypeError: aisatsu() missing 1 required positional argument: 'namae'

07 / 07

多すぎてもエラー

逆に渡しすぎてもエラーになる。takes 1 positional argument but 2 were given は「1つしか受け取らないのに2つ渡された」という意味だよ。

受け取る数と渡す数はぴったり合わせる。これが引数のいちばん基本のルール。

ここまでで、関数に値を「渡す」ことができるようになった。次は逆に、関数から値を「受け取る」番だよ。

def aisatsu(namae):    print(f"{namae}さん、こんにちは")aisatsu("ゆい", "そう")

実行結果

TypeError: aisatsu() takes 1 positional argument but 2 were given