01 / 07
いつ呼んでも同じことしか言えない
前のレッスンで作った関数は、何度呼んでも同じことしか言えなかった。
でも本当は「ゆいさん、こんにちは」「そうさん、こんにちは」のように、相手によって変えたいよね。そのために、関数には値を渡せるようになっているんだ。
def aisatsu(): print("こんにちは")aisatsu()aisatsu()実行結果
こんにちは こんにちは
関数
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