見出し画像

Google ColaboratoryでPythonを始める-13 関数の使用

こんにちはロック204チャンネルです。
この動画は「Google ColaboratoryでPythonを始める 13
関数の使用」についてお送りします。

関数はプログラマーが与えた値を使って、あらかじめ定めた指示どうりに処理を行ない結果を吐き出す箱のようなものです。
処理の材料になる値のことを引数(パラメーター)といい、結果の値のことを 戻り値(返り値)といいます。
関数の例を下に示します。 関数addは aとbを 足し算して、その結果を返り値として 出力する関数です。
addのあとカッコ内の aとbは 引数として呼び出し側より与え戻り値を呼び出し側より受け取ることができます。
このような機能を持った プログラムのブロックを関数といいます。

こちらに関数の基本形を示します。
関数の定義はdefの後に 空白を入れて関数名を定義し カッコの中に 引数(パラメーター)をおきます。 そして 行末にはコロンを書きます。
関数のブロックは 字下げして プログラムを書いていきます。
ここでは 引数aとbを足して 結果をyに代入する 式を書き、return文の後に 戻り値を書いていきます。ここではyとします。
関数を 呼び出すには5行のように 戻り値を入れたい変数x=関数名add括弧の中に 引数を書きます。
ここでは1と2を指定します。 このようにして関数addを呼び出すと結果としてxに関数addの戻り値yが代入されます。

関数は 引数の無い場合もあります。
この例のように関数名set_helloの後に( )だけを置き引数ない場合があります。
呼び出す場合も4行のように 関数名 のあとに括弧だけをつけて呼び出します。
この結果は 戻り値として文字列「Hello!」を rに取得します。

また関数では戻り値の無い場合もあります。
この例では関数no_returnでは、関数の終わりにreturnが置かれていません。
従って、この関数では 関数内の処理としてprintメソッドのみが実行されます。

通常の関数では 呼び出し側にいれた引数の順番に 関数側の引数に代入されますが
この例のように 呼び出し側で c=30, a=10, b=20のように指定すると
呼び出された関数の引数をa, b, cのように定義してやると 図のように呼び出し側のaに設定した値が 受け取り側の引数にaに、同様にb, cで設定された引数がb, cの引数に代入されます。
このように 引数は呼び出し側で明示的に定義することによって 順番どうりにしなくても 引数を受け渡すことができます。

こちらは 変数のスコープ(有効範囲)を示しています。
関数の外側で 定義した変数は 関数内でも参照することが出来ます。このような変数のことをグローバル変数といいます。
関数の中で 定義した変数をローカル変数といい 関数内だけで使用することができます。
関数の外側より参照することはできません。
この場合は 変数bがローカル変数にあたります。
7行目のprint(b) を実行するとエラーとなります。これは 関数内のローカル変数を参照できないためです。
それに対して関数外で 定義したa=10は 関数内で参照することができます。

関数の中で変数を代入すると どうなるでしょうか。
関数外で定義したaはグローバル変数ですが、関数内でこの値を a=30のように変更しようとすると
この変数aは ローカル変数として再定義されます。
したがって関数内の5行ではprint (a,b)は 30 20と 表示されますが
関数を抜け出すと 同じaでも 8行では グローバル変数の a=10が有効となります。

このような 状況を 改善するためglobal変数宣言があります。
3行のように関数内でglobal aのように変数宣言すると 変数aをグローバル変数として定義し、関数内でもその内容を変更することができます。
ここでは1行で a=10として 8行で この関数を呼び出ししています。
そして3行でglobal aと宣言し
4行で a=30とすると変数内で変更した aの内容は
関数を呼び出した後
9行でprint(a)を実行すると 関数内で変更した内容30が 表示されます。

関数内で 関数を定義し使用することができます。 このことを関数のネストといいます。
この例では 関数sub10の中で 関数sub20を定義して使用しています。

引数をまとめて受け渡しすることもできます。
この例では 7行にあるようにタプル形式の引数をまとめて受け渡す例をして示しています。
関数heikinに 引数 1から10の値をタプル形式で 受け渡ししています。
関数heikinのカッコ内は *datasとして受け取り それを 2行から5行にかけて その値を計算をしています。
この例では
2行で 合計を求める変数sumを定義し
3行から4行で合計値を求め
5行で 合計sumをデータ個数で割り平均値を return文で返しています。

こちらは 辞書形式で データを受け渡す例を示しています。
5行で 関数rec_jishoに キーワードa に対して値1、キーワードbに対して値3、 キーワードcに対して値5を指定して 関数に送ります。
1行目の関数rec_jishoのカッコの中は*を二つ書き、辞書名としてdata2と書いています。
そして 2行から3行にかけて各データを 表示するプログラムとしています。

以上で関数についての概要を説明しました。
ご視聴ありがとうございました。


この記事が気に入ったらサポートをしてみませんか?