一度書いて、何度も使う
Python の関数とは、名前をつけた手順のまとまりです。一度書けば、何度でも呼び出して使えます。
学園祭の模擬店で、売上に10%の手数料がかかるとします。計算を毎回書くのは大変です。手数料を求める関数を1つ作れば、どの売上でも同じ名前で呼び出せます。
このレッスンのゴール
メモ
値を受け取って結果を返す関数を、def を使って書くことができる。
キーワード
| ことば | いみ | れい |
|---|---|---|
| 関数 | 名前をつけた、手順のまとまり | |
| 引数 | 関数に渡す値 | with_fee(1000) |
| 戻り値 | 関数が返す結果 | |
| return | 戻り値を返して、関数を終える命令 | |
| 呼び出し | 関数の名前を書いて、実行させること | |
| スコープ | 変数が使える範囲 |
学生が入力するセルは、このプレビューでは空白です。
def で関数を作る
def 名前(引数): の下に、下げた行で手順を書きます。結果は return で返します。
def with_fee(price): は、「price という値を受け取る with_fee という関数」を作ります。作っただけでは動きません。with_fee(1000) と書いて呼び出すと、動きます。
手数料を求める関数
# 手数料は価格の10%です。
def with_fee(price):
fee = price // 10
return price + fee
print(with_fee(1000))
print(with_fee(250))
# 1000 を 3000 に変えて実行しましょう。
関数のプログラムを書き出す
printf 'def double(n):\n return n * 2\n\nprint(double(21))\n' > fn.pyここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
実行して、戻り値を確かめる
python3 fn.pyここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
return は結果を返し、print は表示する
print は、値を画面に見せるだけです。関数を呼び出した場所には、何も戻りません。
return は、値を呼び出した場所に返します。返した値は、変数に入れたり、別の計算に使ったりできます。
例: print と return の違い
| return | ||
|---|---|---|
| 画面に出るか | 出る | 出ない。呼び出し側が表示する |
| 変数に入れられるか | できない | できる |
| 関数が終わるか | 終わらない | そこで終わる |
| 使う場面 | 人に見せる | 次の計算に渡す |
学生が入力するセルは、このプレビューでは空白です。
よくある間違い
注意
「画面に出たのだから、結果は返っている」と考える人がいます。画面に出るのは print の働きで、返すのは return の働きです。関数の結果を使いたいときは、必ず return を書きます。
関数の中の変数は、外には出ない
関数の中で作った変数は、その関数の中だけで使えます。これがスコープです。
外に同じ名前の変数があっても、中の変数は別の箱です。外の値は、関数の中の代入では変わりません。
同じ名前の別の箱
total = 100
def add_fee(price):
# この total は関数の中だけの、別の箱です。
total = price + 10
return total
print(add_fee(50))
print(total)
# 2つの表示が、なぜ違うのかを考えましょう。
assert で関数に小さなテストをする
assert 式 は、式が True なら何も起こさず、False ならエラーで止まります。関数の答えが期待どおりかを、1行で確かめられます。
課題の採点も、この考え方です。隠れたテストが、あなたの関数を呼び出して、答えを assert で確かめます。
関数とテストを書き出す
printf 'def double(n):\n return n * 2\n\nassert double(4) == 8\nprint("ok")\n' > fn_test.pyここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
テストを通す
python3 fn_test.pyここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。