こんにちは、森山です。
前回のコラムでは、よく使う処理をひとまとめにする「関数」について学びました。
関数を定義するときは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を計算して戻り値として返すプログラムなども紹介されています。
このほかにも、引数を順番に渡す「位置引数」、引数の名前を指定して渡す「キーワード引数」、引数を省略したときに使われる「デフォルト値」などが、実際のコードとともに解説されています。
引数に渡す身長や体重などの数値を変えて、戻り値がどのように変化するかぜひ試してみてください。
最後までお読みいただき、ありがとうございました。
それではまた次回お会いしましょう!
