関数

INPUT · スライド

名前を書いて渡す

01 / 07

順番を覚えていられない

引数が増えてくると、呼ぶ側を読んでも何がなんだか分からなくなる。

下の 15 は年齢だと分かるだろうか。分かるのは、すぐ上に関数の定義があるからだよ。実際のプログラムでは定義が別の場所にあるので、呼んでいる行だけを見て意味が取れないのは困る。

def shoukai(namae, toshi, shumi):    print(f"{namae} {toshi}さい {shumi}")shoukai("ゆい", 15, "どくしょ")

実行結果

ゆい 15さい どくしょ

02 / 07

名前を書いて渡す

渡すときに、受け取る側の名前を書いて = でつなぐことができる。これを キーワード引数(名前をつけて渡す引数)というよ。

toshi=15 と書いてあれば、15 が何の数字かひと目で分かるね。行が少し長くなるかわりに、読み手が定義を見に行かなくて済む。

def shoukai(namae, toshi, shumi):    print(f"{namae} {toshi}さい {shumi}")shoukai(namae="ゆい", toshi=15, shumi="どくしょ")

実行結果

ゆい 15さい どくしょ

03 / 07

順番を気にしなくてよくなる

名前で渡すと、並べる順番は自由になる。どの名前に何を渡したかがはっきりしているので、Pythonが迷わないからだよ。

下は shumi から書いているけれど、結果はさっきとまったく同じ。「3番目が趣味だった気がする」と思い出す必要が無くなるんだ。

def shoukai(namae, toshi, shumi):    print(f"{namae} {toshi}さい {shumi}")shoukai(shumi="どくしょ", namae="ゆい", toshi=15)

実行結果

ゆい 15さい どくしょ

04 / 07

名前なしと混ぜられる

全部に名前をつけなくてもいい。名前なしを先に、名前ありをあとに書けば混ぜられるよ。

1番目の引数のように「見れば分かる」ものは名前なしで、意味の取りにくいものだけ名前をつける。実際のPythonのコードはたいていこの書きかたをしている。

def shoukai(namae, toshi, shumi):    print(f"{namae} {toshi}さい {shumi}")shoukai("ゆい", shumi="どくしょ", toshi=15)

実行結果

ゆい 15さい どくしょ

05 / 07

名前ありのあとに、名前なしは書けない

順番を逆にするとエラーになるよ。名前ありを先に書いてしまうと、そのあとの名前なしが何番目のつもりなのか決められないからだね。

これは実行する前に見つかる SyntaxError。書いた形そのものがおかしいときのエラーだよ。

def shoukai(namae, toshi):    print(f"{namae} {toshi}さい")shoukai(namae="ゆい", 15)

実行結果

SyntaxError: positional argument follows keyword argument

06 / 07

第2章のあれは、これだった

第2章で sorted(tens, reverse=True) と書いたのを覚えているかな。あのとき「この書きかたは第3章で扱う」と言ったのが、まさにこれだよ。

reverse は sorted の引数の名前で、True をその名前に渡していたんだ。tens は名前なし、reverse=True は名前あり——名前なしが先、名前ありがあとのきまりどおりに並んでいるね。

tens = [80, 45, 95]print(sorted(tens, reverse=True))

実行結果

[95, 80, 45]

07 / 07

他人のコードが読めるようになる

Pythonのライブラリは、この書きかたを前提に作られている。sorted も split も、たくさんの引数を持っていて、そのほとんどを名前で渡すようになっているんだ。

だから なんとか=なんとか という見慣れない書きかたに出会っても、もうこわくない。「ああ、名前をつけて渡しているんだな」と読めばいい。

次のレッスンでは、その相棒になる仕組み——渡されなかったときの値を決める書きかたを見ていこう。

moji = "りんご,みかん,ぶどう"print(moji.split(sep=","))

実行結果

['りんご', 'みかん', 'ぶどう']