関数

INPUT · スライド

引数を2つ以上渡す

01 / 07

カンマで並べる

受け取る名前は1つとは限らない。カンマで区切って並べると、いくつでも受け取れるよ。

呼ぶときも同じようにカンマで並べる。1つ目に渡した値が1つ目の名前に、2つ目が2つ目の名前に入るよ。

def tashizan(a, b):    return a + bprint(tashizan(2, 3))print(tashizan(100, 250))

実行結果

5
350

02 / 07

順番が意味を持つ

ここが最大の注意点。渡した値は書いた順に入る。順番を入れかえると、別のことをしてしまうよ。

下の waru(10, 2) は 10 / 2、waru(2, 10) は 2 / 10。同じ関数を同じ値で呼んでいるのに、答えがまるで違うね。

def waru(a, b):    return a / bprint(waru(10, 2))print(waru(2, 10))

実行結果

5.0
0.2

03 / 07

名前で意味が伝わるようにする

a と b では、どちらが何なのか読み取れない。受け取る名前を意味のある言葉にすると、順番のまちがいがぐっと減るよ。

kingaku(tanka, kosuu) なら、単価が先で個数があとだと読める。名前はコメントのかわりになるんだ。

def kingaku(tanka, kosuu):    return tanka * kosuuprint(kingaku(150, 3))

実行結果

450

04 / 07

数が合わないとエラー

受け取る名前が2つなら、渡すのも必ず2つ。1つしか渡さないと TypeError で止まるよ。

エラーのうしろに足りない名前が出るので、どれを渡し忘れたのかすぐ分かるね。

def tashizan(a, b):    return a + bprint(tashizan(2))

実行結果

TypeError: tashizan() missing 1 required positional argument: 'b'

05 / 07

3つ以上でも同じ

3つでも4つでも、カンマで並べるだけ。増えても書きかたは変わらないよ。

ただし多すぎると、呼ぶ側が順番を覚えきれなくなる。3つくらいまでにしておくと読みやすいコードになるよ。

def shiharai(tanka, kosuu, souryou):    return tanka * kosuu + souryouprint(shiharai(150, 2, 300))

実行結果

600

06 / 07

リストといっしょに渡す

渡すものは1つの数や文字でなくていい。リストもまるごと1つの引数として渡せるよ。

下の例は、点数のリストと基準の点をいっしょに渡して、基準以上が何人いるかを数えている。データと条件を別々に渡すと、同じ関数を基準を変えて何度でも使えるね。

def nannin(tens, kijun):    kazu = 0    for ten in tens:        if ten >= kijun:            kazu += 1    return kazuprint(nannin([80, 55, 90], 60))print(nannin([80, 55, 90], 85))

実行結果

2
1

07 / 07

辞書もそのまま渡せる

辞書を渡せば、1件ぶんのデータをまとめて渡せる。名前・点数・住所と項目が増えても、引数は1つのままだよ。

これで「渡す」と「返す」がひととおりそろった。関数はもう、あなたの道具だよ。

次のグループでは、関数の中で作った変数が外から見えないという仕組み(スコープ)と、名前を書いて渡す書きかた、渡されなかったときの値を見ていくよ。

def shoukai(hito, kotoba):    return f"{hito['namae']}さん、{kotoba}"print(shoukai({"namae": "ゆい", "ten": 80}, "こんにちは"))

実行結果

ゆいさん、こんにちは