放課後Pythonラボ 第13時限目 「引数」と「戻り値」で関数をもっと便利にしよう

こんにちは、森山です。

前回のコラムでは、よく使う処理をひとまとめにする「関数」について学びました。
関数を定義するときはdefを使い、実行するときは関数名の後ろに()を付けて呼び出しましたね。

まずは、前回作ったボックスステップの関数を思い出してみましょう。

def box_step():
    print("右脚を斜め45度前方へ出す")
    print("左脚を横に出す")
    print("右脚を元の位置に戻す")
    print("左脚を元の位置に戻す")

box_step()

この関数は、呼び出すたびに同じ動きを実行します。

しかし、関数を使っていると、「呼び出すときにデータを渡したい」「関数の中で作った結果を、ほかの処理でも使いたい」という場面が出てきます。

そこで今回は、ハイスクールPythonの「6.3 引数と戻り値」でも紹介されている関数にデータを渡す「引数」と、関数から結果を返す「戻り値」について学んでいきましょう。

関数にデータを渡す「引数」って何?

例えば、先生が出席を確認するときに、毎回「出席しています」とだけ言っても、誰が出席しているのか分かりませんよね。

「石川さんは出席しています」のように、名前を変えながら表示できれば、同じ確認方法をクラス全員に使えます。

関数も同じです。呼び出すときにデータを渡すことで、渡された内容に合わせて処理を変えられます。
この関数に渡すデータのことを「引数(ひきすう)」といいます。

実際に、名前を受け取って出席を確認する関数を作ってみましょう。

def check_attendance(name):
    print(f"{name}さんは出席しています")

check_attendance("石川")
check_attendance("山口")
check_attendance("内田")

このコードをGoogle Colabに入力して、実行してみてください。
それぞれ違う名前で出席確認が表示されたでしょうか?

def check_attendance(name):のnameには、関数を呼び出すときに渡した名前が入り、print()で表示されます。

引数の書き方のルール

引数を受け取る関数は、次のように書きます。

def 関数名(引数):
    実行したい処理

関数を呼び出すときは、()の中に渡したいデータを書きます。

関数名(渡したいデータ)

引数には文字列だけでなく、数値やリスト、辞書なども渡すことができます。
また、引数は次のように複数設定することもできます。

def introduce_student(name, club):
    print(f"{name}さんは{club}に所属しています")

introduce_student("石川", "バレー部")
introduce_student("池田", "バスケ部")

この関数では、nameに名前、clubに部活動を渡しています。

複数の引数は、カンマ(,)で区切ります。今回のように引数名を指定せずに値を渡す場合は、関数を定義したときと同じ順番で渡します。この渡し方を「位置引数」といいます。

関数から結果を返す「戻り値」って何?

引数を使うと、関数の外からデータを渡せるようになりました。
反対に、関数の中で作った結果を外へ渡したいときに使うのが「戻り値」です。

戻り値は、先生にテストの答案用紙を提出し、採点結果を返してもらう場面をイメージすると分かりやすいかもしれません。

生徒が各教科の答案用紙を提出すると、先生はそれぞれを採点し、平均点を計算します。そして、計算した平均点を生徒に伝えます。

このとき、先生に渡した答案用紙が「引数」、先生が採点して返した平均点が「戻り値」に当たります。

関数は引数としてデータを受け取り、処理した結果を呼び出した場所へ返すことができます。
関数から値を返すときは、returnを使います。

それでは、国語、数学、英語の点数を受け取り、3教科の平均点を返す関数を作ってみましょう。

def calculate_average(japanese, math, english):
    total = japanese + math + english
    average = total / 3
    return average

result = calculate_average(72, 84, 90)
print(result)

このコードをGoogle Colabで実行し、どのような結果が表示されるか確認してみましょう。

calculate_average(72, 84, 90)を呼び出すと、72がjapanese、84がmath、90がenglishに入ります。

関数の中では、3教科の点数を足して変数totalに代入し、合計点を3で割って平均点を求めています。

最後に、return averageによって、計算した平均点が関数の外へ返されます。返された平均点は、変数resultに代入されています。

print()returnの違い

print()とreturnは、どちらも結果を確認するときに登場するため、似ているように見えるかもしれません。

しかし、それぞれの役割は異なります。

  • print()は、文字や数値を画面に表示する
  • returnは、関数の処理結果を呼び出した場所へ返す

returnで返された値は、変数に入れたり、別の計算に使ったりすることができます。

def add_score(score1, score2):
    return score1 + score2

result1 = add_score(70, 85)
result2 = add_score(90, 80)

all_score = result1 + result2
print(all_score)

このように、戻り値を使えば、関数で計算した結果を次の処理へつなげられます。

ここがポイント!

returnが実行されると、その関数の処理はそこで終了します。
そのため、returnより後に同じインデントで処理を書いても実行されません。

def add_score(score1, score2):
    return score1 + score2
    print("計算が終わりました")

このコードでは、returnより前に関数が終了するため、print(“計算が終わりました”)は実行されません。戻り値を使う関数を作るときはreturnを書く位置に注意しましょう。

先生の紹介文を作る関数に発展させよう

それでは第12時限目で使った先生のデータと、今回学んだ引数と戻り値を組み合わせてみましょう。

import random

# 先生と特徴をまとめたデータ
teachers = {
    "担任の先生": [
        "シャツがはみ出ているときがある",
        "いつもいちご牛乳を飲んでいる",
        "実は犬好き"
    ],
    "校長先生": [
        "朝礼の話が長い",
        "猫を見かけると笑顔になる",
        "ゴルフが好き"
    ],
    "保健室の先生": [
        "いつも優しい",
        "推し活をしている",
        "怒ると少し怖い"
    ]
}

# 先生の名前を受け取り、紹介文を返す関数
def create_introduction(name):
    features = teachers[name]
    introduction = f"{name}は、{'、'.join(features)}という特徴があります。"
    return introduction

# 先生をランダムに1人選ぶ
name = random.choice(list(teachers.keys()))

# 関数から返された紹介文を変数に入れる
message = create_introduction(name)

print(message)

Google Colabで何度か実行してみてください。

実行するたびに先生がランダムに選ばれ、その先生に合った紹介文が表示されます。
このプログラムでは、選ばれた先生の名前をcreate_introduction()の引数として渡しています。

関数の中では、その名前をキーとして特徴のリストを取り出し、紹介文を作っています。完成した紹介文はreturnで関数の外へ返され、変数messageに代入されます。

先生や特徴を追加したり、紹介文の内容を変えたりして、どの部分が呼び出されているのか確認してみてください。

引数と戻り値を使って関数を活用しよう

今回は、次の内容を学びました。

  • 引数は、関数に渡すデータ
  • 引数を使うと、渡したデータに合わせて処理を変えられる
  • 引数は複数設定できる
  • 戻り値は、関数から呼び出した場所へ返す値
  • 値を返すときはreturnを使う
  • print()は画面に表示し、returnは結果を関数の外へ返す
  • 戻り値は変数に入れたり、別の計算に使ったりできる
  • returnが実行されると、その関数の処理は終了する

前回学んだ関数の定義と呼び出しに、引数と戻り値を加えることで、同じ関数をさまざまなデータに使えるようになりました。

ハイスクールPythonの「6. 関数でコードをまとめる・再利用する」では、身長と体重を引数として受け取り、BMIを計算して戻り値として返すプログラムなども紹介されています。

このほかにも、引数を順番に渡す「位置引数」、引数の名前を指定して渡す「キーワード引数」、引数を省略したときに使われる「デフォルト値」などが、実際のコードとともに解説されています。
引数に渡す身長や体重などの数値を変えて、戻り値がどのように変化するかぜひ試してみてください。

最後までお読みいただき、ありがとうございました。
それではまた次回お会いしましょう!

PAGE TOP