Day 4・関数・モジュール(再利用と部品化)
関数def(引数・戻り値・デフォルト引数)
処理に名前を付けて何度でも呼び出せる「関数」の基本を学ぶ。
関数とは「名前を付けた処理のかたまり」
同じ計算や手順を何度も書くのは面倒ですし、間違いの元です。関数は、ひとまとまりの処理に名前を付けておき、必要なときにその名前で呼び出す仕組みです。料理でいえば「だしを取る」という手順に名前を付けておき、レシピの中では「だしを取る」と一言書けば済むようにするイメージです。
def greet(name):
message = "こんにちは、" + name + "さん"
return message
# 呼び出す
result = greet("田中")
print(result) # こんにちは、田中さん- def は「これから関数を定義します」という合図の英単語(define の略)
- greet が関数の名前。呼ぶときはこの名前を使う
- () の中の name が引数(ひきすう)。呼び出し側から渡す値の受け口
- return は「この値を呼び出し元に返す」という命令
- 関数の中身はインデント(字下げ)で表す。Dayによってはここが動作の境界になる
引数と戻り値
引数は関数に「入れる」情報、戻り値(もどりち)は関数から「出てくる」結果です。関数を「入力を受け取って出力を返す箱」と考えると分かりやすいです。引数は複数書けますし、return が無い関数は特に値を返しません(None という「何も無い」を表す値が返ります)。
def add(a, b):
return a + b
def say_hello():
print("やあ") # 表示するだけで return は無い
total = add(3, 5)
print(total) # 8
x = say_hello() # やあ と表示される
print(x) # None(戻り値が無いため)print と return は別物
print は画面に文字を表示するだけで、値を持ち帰りません。計算結果を後で使いたいなら return が必要です。初心者がよく混同するポイントです。「表示したのに変数に入れたら None だった」という時は、return を書き忘れていないか確認しましょう。
デフォルト引数
引数に「渡されなかったときの初期値」をあらかじめ決めておけます。これをデフォルト引数と呼びます。よく使う値を初期値にしておくと、呼び出し側が毎回指定せずに済みます。
def greet(name, greeting="こんにちは"):
return greeting + "、" + name + "さん"
print(greet("佐藤")) # こんにちは、佐藤さん
print(greet("佐藤", greeting="おはよう")) # おはよう、佐藤さんなぜデフォルト引数が便利か
ほとんどのケースで同じ値を使うなら、それを初期値にしておくことで呼び出しが短くなり、読み手も「普段はこの値なんだな」と意図を読み取れます。例外的なときだけ明示的に上書きする、という書き方が可能になります。
AIにはこう聞く
「この関数の引数と戻り値の型を教えて。何を入れると何が返る?」と聞くと、関数の仕様を日本語で整理してくれます。自分で書いた関数でも、複雑になったらAIに要約させて読みやすさを確認すると良いです。
読んでも腑に落ちない所は、AIに噛み砕いてもらいましょう。
理解度チェック
答えられれば、面接で説明できる状態に一歩近づきます。
次の関数を greet("山田") と呼び出したときの戻り値はどれ? def greet(name, greeting="やあ"): return greeting + name
return を書かない関数を呼び出して、その結果を変数に代入すると変数の中身はどうなる?
引数と戻り値の違いを、未経験者に説明するつもりで書いてください。
記述式です。まず自分の言葉で答えを考えてから、模範解答を開いて自己採点してください。