関数

INPUT · スライド

渡されなかったときの値

01 / 07

渡し忘れると止まる

引数を受け取る関数は、必ず渡さないと動かない。1つでも足りないとエラーになるよ。

でも「たいていは同じ値でいいのに、毎回書かないといけない」という場面は多い。全員に ゲスト と呼びかけるだけなら、いちいち渡したくないよね。

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

実行結果

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

02 / 07

初期値を書いておく

引数の名前のうしろに = で値を書いておくと、それが 初期値(渡されなかったときに使われる値)になるよ。

渡さなければ初期値、渡せばそちらが使われる。1つの関数が2通りの呼ばれかたに応えられるようになるんだ。

def aisatsu(namae="ゲスト"):    print(f"こんにちは、{namae}さん")aisatsu()aisatsu("ゆい")

実行結果

こんにちは、ゲストさん
こんにちは、ゆいさん

03 / 07

初期値のある引数は、後ろに書く

初期値のある引数は、初期値の無い引数より後ろに書かなければいけない。逆にすると SyntaxError になるよ。

理由は前のレッスンと同じ。chuumon("ノート", 3) と呼ばれたとき、3 をどこに入れればいいのか決められなくなるからだね。省略できるものはうしろ、と覚えよう。

def chuumon(shina="ペン", kosuu):    print(f"{shina}を{kosuu}こ")

実行結果

SyntaxError: parameter without a default follows parameter with a default

04 / 07

一部だけ渡す

初期値のある引数が複数あるときは、渡したいものだけ名前をつけて渡す。前のレッスンのキーワード引数が、ここで効いてくるよ。

下の3つ目の呼び出しでは kosuu を飛ばして iro だけ渡している。名前で指定しているから、途中を飛ばせるんだ。

def chuumon(shina, kosuu=1, iro="くろ"):    print(f"{shina}を{kosuu}こ、いろは{iro}")chuumon("ペン")chuumon("ペン", 3)chuumon("ペン", iro="あか")

実行結果

ペンを1こ、いろはくろ
ペンを3こ、いろはくろ
ペンを1こ、いろはあか

05 / 07

ライブラリはこの形でできている

ここまで使ってきた道具を思い出してみよう。

  • sorted(tens) … 並べかたを書かなくても小さい順になる
  • sorted(tens, reverse=True) … 書けば大きい順になる

reverse の初期値が False だから、何も書かないと小さい順なんだ。split() の区切り文字も、get(kagi, 0) の2つ目も、同じ考えかたでできている。

よく使う設定を初期値にしておいて、変えたい人だけ書く。これがPythonの道具が短く書ける理由だよ。

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

実行結果

[45, 80, 95]
[95, 80, 45]

06 / 07

初期値に None を選ぶ

「渡されなかった」ことを関数の中で知りたいときは、初期値に None を置くと便利だよ。

0 や "" を初期値にすると、「渡されなかった」のか「本当に 0 を渡された」のかが区別できない。第1章でやった None の出番だね。

def hyouji(namae, adana=None):    if adana is None:        print(namae)    else:        print(adana)hyouji("ゆい")hyouji("ゆい", "ゆいちゃん")

実行結果

ゆい
ゆいちゃん

07 / 07

関数の道具はここまで

これで第3章の文法はひととおりそろった。def で作り、引数で渡し、return で返し、名前をつけて渡し、初期値を決める。

あとはどう使うかだ。どこを関数にするのか、どんな名前をつけるのか、1つの関数にどこまでやらせるのか。文法書には書いていないけれど、読みやすさを決めるのはそちらのほうだよ。

次のレッスンは第3章の総合演習。新しい文法は出てこない。10問で、使い分けの感覚を作っていこう。