関数を定義する
同じ 3 行を、また書いている
第 1 章から、演習ではずっと def で始まる形を書いてきました。あれが 関数 です。ここまでは決まりごととして受け入れてもらっていましたが、ここで正面から扱います。
関数は、いくつかの処理をひとまとめにして名前を付けたものです。名前を付けておけば、あとから何度でもその名前で呼び出せます。同じ処理を 3 回書いたら、それは関数にする合図です。書く量が減るだけでなく、直す場所が 1 か所になります。
Python
def yen(price):
return str(price) + "円"
print(yen(120))
print(yen(80))yen が関数名、price が 引数 です。引数は外から受け取る材料で、関数の中では普通の変数として使えます。return のうしろに書いた値が、この関数の答えになります。
def のうしろに関数名、かっこ、半角コロンを書き、次の行から半角スペース 4 つ分下げて中身を書きます。関数名は小文字と _ でつなぐのが Python の慣習で、makeLine ではなく make_line と書きます。
書いただけでは 1 度も動かない
def の行を書いただけでは、中身は 1 度も実行されません。def は「この名前でこういう処理を用意する」という登録であって、実行の合図ではないからです。
yen(120) と書いて初めて中身が動きます。この書き方を 呼び出し と言います。かっこを付け忘れて yen とだけ書くと、関数そのものを指すだけで実行されません。
「関数を書いたのに何も起きない」の原因は、たいてい呼び出しを書き忘れていることです。定義と呼び出しは必ずセットです。
print では採点に届かない
return と print は、まったく別のことをします。
Python
def show(price):
print(str(price) + "円")
result = show(120)
print(result)画面には 120円 と None が出ます。show は文字を表示しはしましたが、答えを返していません。return を書かない関数の戻り値は None です。
このプラットフォームの採点は、関数が return した値を見ます。画面にどれだけ正しく表示されていても、return が無ければ不正解です。逆に print を 1 行も書かなくても、return さえ正しければ通ります。
関数の入口で「変な値が来ていないか」を整えておくと、あとに続く処理が 1 本道になって読みやすくなります。引数はただの変数なので、中で別の値に置き換えても構いません。
やってみよう
関数 greet_user(name) を実装してください。引数 name を受け取り、name のうしろに "さん、おこづかい帳へようこそ" をつないだ文字列を return します。
ただし name が空文字 "" のときは、name の代わりに "ゲスト" を使って ゲストさん、おこづかい帳へようこそ を返します。文字列の連結は + です。
書けたら print(greet_user("たろう")) を手元で試して、定義と呼び出しがつながる感覚を確かめてみてください。
要件
- 関数名は greet_user で、引数は name の 1 つ
- 戻り値は name + "さん、おこづかい帳へようこそ" の文字列
- name が空文字 "" のときは "ゲスト" を使う
- print ではなく return で返す