第8回 ユーザー定義関数 (1)

本題に入る前に必ず連絡の動画を見てください。
Google Colabへのリンク

1. 基本構文

概要

動画の解説を参照

以前紹介した標準ライブラリの関数・メソッドはカッコの中に引数 (ひきすう) を入れてそれに応じた処理をさせました。
また、戻り値 (関数・メソッドを呼んで出てきた値) を表示させたり、変数に代入して使ったりということもしました。

このようなものを自分でつくることができます。これをユーザー定義関数と言います。
例えば「引数として横と縦の幅 x, y を受け取って長方形の面積を返す関数」get_rectangle_area はこのようになります。

この関数を呼んで結果を表示させるとこうなります。

return文を省略することもできます。
以下は、「引数として横と縦の幅 x, y を受け取って長方形の情報を表示する関数」show_rectangle_information です。
return文がない場合は、戻り値は None (「なし」という意味。「ナン」と読みます) になります。
print文で戻り値を表示しようとすると関数の中の print文による表示が行われるのとは他に、「None」が表示されます。
引数を受け取らない関数を作ることもできます。
以下は、「関数の外にある変数 x, y を横と縦の幅とする長方形の面積を返す関数」get_rectangle2 です。

課題1

※ 準備 : 学籍番号を入れて「入力」をクリック (タップ) してください。


関数、を記述し、その関数を呼んで結果を表示するコードを書いてください。

2. スコープ

動画の解説を参照

関数の中で作られた変数は、その関数の中でだけ有効です。
そのため、上記の関数の外で area にアクセスしようとするとエラーになります。
このような、変数の有効範囲のことをスコープといいます。
具体的には「変数 area のスコープは関数 get_rectangle_area の中だけ」のような言い方になります。
このような変数をローカル変数といいます。

逆に、関数の外で作られた変数は関数の中からでも参照できます。
このような変数をグローバル変数といいます。
グローバル変数の値は、そのままでは関数の中で書き換えることができません。
関数の中で変えようとするとエラーになります。
以下は、「関数の外で作られた変数 x の値を1増やす」という関数の失敗例です。

関数の中で「global (その変数)」としてやると、その変数が書き換えられるようになります。
関数の中で、グローバル変数と同じ名前の変数を作るときは注意が必要です。
以下のコードでは、関数の外と中で x を定義して値 5 を入れていますが、グローバル変数の x の値は変化しません。
意図しない動作の原因になるので、関数の中でグローバル変数と同じ名前のローカル変数を作ることは非推奨です。

課題2

名前と学籍番号を表示する関数 show_information と、名前と学籍番号を入力させて変更する関数 change_information を書き、初期値として自分の氏名と学籍番号を id, name に入れた後、初期状態の情報を表示し、情報を書き換えさせたあと、もう一度情報を表示するコードを書いてください。
(例)

3. いろいろな引数の取り方

動画の解説を参照

関数の引数にデフォルト値を記述すると、関数を呼ぶときに値を省略できます。
引数を1つ書いた場合は、関数を記述したときの最初の変数にその値が入ります。

関数を呼ぶときに、引数名を指定して値を渡すことができます。
この方法なら、x をデフォルト値にして y の値だけ指定したり、入れる引数の順番を関数に記述されているのと違う順番にすることができます。

引数に「*」をつけると、引数の個数が可変になります。
以下のコードでは、引数 value にはコンマ区切りで複数の値を渡すことができます。
関数の中では value はリストになります。そのため、for文の繰り返しが終わった時点で変数 sum にそれらの総和が入ります。

同様に、このようにすれば引数の総積 (すべてかけ合わせたもの) が得られます。

引数に「**」をつけると、辞書型の値を渡せるようになります。

課題3

学籍番号, 氏名からなるリストを返す get_personal_data を作り、結果を確認するコードを記述してください。
ただし、引数を省略した場合は自分の学籍番号、氏名の情報を持った変数を返すようにして、「指定しない」「学籍番号だけ別のもの」「氏名だけ別のもの」「両方とも別のもの」になるように関数を呼んで結果を表示してください。
(実行例)

提出

今回作成したノートブックを「plang2024a@gmail.com」と共有してください。
※ 課題の再提出の際は、ノートブックの再度の共有はせずにチャットで連絡してください。