Py初めてのPython

Day 4関数・モジュール(再利用と部品化)

関数def(引数・戻り値・デフォルト引数)

処理に名前を付けて何度でも呼び出せる「関数」の基本を学ぶ。

関数とは「名前を付けた処理のかたまり」

同じ計算や手順を何度も書くのは面倒ですし、間違いの元です。関数は、ひとまとまりの処理に名前を付けておき、必要なときにその名前で呼び出す仕組みです。料理でいえば「だしを取る」という手順に名前を付けておき、レシピの中では「だしを取る」と一言書けば済むようにするイメージです。

PYTHON
def greet(name):
    message = "こんにちは、" + name + "さん"
    return message

# 呼び出す
result = greet("田中")
print(result)  # こんにちは、田中さん
def で関数を定義し、名前と () で呼び出す
  • def は「これから関数を定義します」という合図の英単語(define の略)
  • greet が関数の名前。呼ぶときはこの名前を使う
  • () の中の name が引数(ひきすう)。呼び出し側から渡す値の受け口
  • return は「この値を呼び出し元に返す」という命令
  • 関数の中身はインデント(字下げ)で表す。Dayによってはここが動作の境界になる

引数と戻り値

引数は関数に「入れる」情報、戻り値(もどりち)は関数から「出てくる」結果です。関数を「入力を受け取って出力を返す箱」と考えると分かりやすいです。引数は複数書けますし、return が無い関数は特に値を返しません(None という「何も無い」を表す値が返ります)。

PYTHON
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(戻り値が無いため)
return がある関数と無い関数の違い

print と return は別物

print は画面に文字を表示するだけで、値を持ち帰りません。計算結果を後で使いたいなら return が必要です。初心者がよく混同するポイントです。「表示したのに変数に入れたら None だった」という時は、return を書き忘れていないか確認しましょう。

デフォルト引数

引数に「渡されなかったときの初期値」をあらかじめ決めておけます。これをデフォルト引数と呼びます。よく使う値を初期値にしておくと、呼び出し側が毎回指定せずに済みます。

PYTHON
def greet(name, greeting="こんにちは"):
    return greeting + "、" + name + "さん"

print(greet("佐藤"))                    # こんにちは、佐藤さん
print(greet("佐藤", greeting="おはよう"))  # おはよう、佐藤さん
greeting に初期値を持たせる

なぜデフォルト引数が便利か

ほとんどのケースで同じ値を使うなら、それを初期値にしておくことで呼び出しが短くなり、読み手も「普段はこの値なんだな」と意図を読み取れます。例外的なときだけ明示的に上書きする、という書き方が可能になります。

AIにはこう聞く

「この関数の引数と戻り値の型を教えて。何を入れると何が返る?」と聞くと、関数の仕様を日本語で整理してくれます。自分で書いた関数でも、複雑になったらAIに要約させて読みやすさを確認すると良いです。

読んでも腑に落ちない所は、AIに噛み砕いてもらいましょう。

理解度チェック

答えられれば、面接で説明できる状態に一歩近づきます。

Q1

次の関数を greet("山田") と呼び出したときの戻り値はどれ? def greet(name, greeting="やあ"): return greeting + name

Q2

return を書かない関数を呼び出して、その結果を変数に代入すると変数の中身はどうなる?

Q3

引数と戻り値の違いを、未経験者に説明するつもりで書いてください。

記述式です。まず自分の言葉で答えを考えてから、模範解答を開いて自己採点してください。