初心者が1からプログラミング(Python)を学んでみた Part6 - functionを学ぶ
今日は、便利な”function”の機能を学んでいきたいと思います。
functionとは
function(関数)とは、私の感覚的には箱に何か物を入れて違うものが出てくるマジックボックスみたいなもの。形としてはまず関数を定義し、作られた関数をコード内で呼び出して実行となります。関数を作っただけではPython は無視するので何も実行されないし、例え間違っていても、エラーも起こりません。関数の定義は決まっているので形で覚えます(下のコード)。
def 関数の名前(入れるもの):
何かのコード
return 取り出すもの
例題とともに見て行ったほうが多分わかりやすいです。下のコードでは、円周と円の面積を半径から同時に計算する関数を作りました。挿入はr(ここではradiusを指す)で、取り出されるものは名前を付けて保存された円周と面積の二つ。functionに入れるものは幾つでもいいし、返すものも幾つでもいいです。(” , ”コンマで区切ります。)
詳しく見ていきます(下写真)。
①:defを使ってまずは関数を定義。
②:関数の名前。Python のスクリプトの名前付け同様、その関数の役目にあった名前が理想。
③:()内には挿入するもの(幾つでも)を指定。defの中で使われる言葉はここで指定された言葉と一致しないと使えません。
④:関数の中で実行されるものは全て必ずインデントの中に入れます。同じスペース分(tabを押して移動、もしくはスペース4っつ分)開けて先頭を揃える。
⑤:returnで取り出したいもの(幾つでも)を指定。この場合は2つ指定。returnで何かを返さないと、実行されても通りすぎるだけで何も起こらないこともあります。⚠️
⑥:functionの呼び出しもと。定義しただけでは何も起こらず、呼び出しもとがあって初めて実行される。今、circleというfunctionは二つの結果が出される仕組みになっているので、ここでもそれぞれ名前をつけて取り出し。この場合、rが4にすり替わって、function内のr全てが4(挿入値)として計算されます。returnの後で指定した結果の順番と呼び出し元の2つの順番は一致させます。
⑦:実行結果を表示。
実行結果はこうなります。円周と円の面積の計算結果が表示されました。
functionは便利
functionは何度も使えるので非常に便利です。例えば、上のfunctionをもう一回違うrで計算すると、
定義したcircle(r)というfunctionを半径が4の時と6の時で使い回しが可能になります。全く同じ動作をする時、何度も同じ数式を描かずとも挿入場所を変えるだけで1行で済むので楽です。
function例題
他にも計算式をfunctionを作ってから計算させました。
①(下写真参照):挿入は順番を間違わなければ幾つでも可能。
②:結果も一つに限らず、幾つでも可能。
③:挿入元を関数内でなく、先に指定。この場合、関数内の”w”と”h”が指定された”width(底辺)”と”height(高さ)”にすり替わって計算されます。
④:違う値で関数を再利用。
実行結果はこうなります。
他のも計算してみました。
この場合、二次方程式の解を関数内で名前をつけずに、直接返しました。returnの後に直接計算式や実行することを入れることも可能ですが、見づらいので私は使いません。実行結果も載せておきます。
main()を使う場合
関数の名前はなんでもいいのですが、Python上で既に決められていて使えない言葉もたまにあります。例えば、関数名をmain()にする場合、スクリプトの中心的な意味になり、サブの関数をまとめて保持したりできます。
使い方としてはmain()の関数の中に先ほど計算した関数を全部入れました。これがまた特殊で、呼び出しもとは、以下のように形を少し変えます。
形は、”if __name__== '__main__':(全てアンダーバー2本)にdefと同じくスペース4っつ分ずらした位置にmain()をおきます”。この2行を入れることによって、本来なら上から下へ読むPythonがmain()が先に来て、他のfunctionが後出しされても、関数から先に読むことが可能になるそうです。全体図を貼っておきます。
functionは呼び出し可能
作ったfunctionは他のスクリプト上で呼び出して使うことが可能です(便利!!)
先ほど作ったcircle()の関数を新たに作られた別のPythonスクリプトに呼び出して使います。
①:circle()の関数を含む別のPythonスクリプトの名前。本来は、func_practice.pyのファイルを呼び出していますが”.py”をカットして呼び出します。
②:スクリプト全体ではなく、決まった関数だけを呼び出します。①と②の定型文で”func_practice.pyのファイルからcircle()の関数を呼び出します”という指示になります。
③:呼び出しが完了しているので、このスクリプト上には関数の呼び出し元だけでオッケー。
他の人が作ったPackageを使ってみようと前書きました。⏬⏬
自分で作った関数もまた同じように、思ったように作動するのを確認したのなら呼び出して再利用して楽しましょう!
もし、関数だけでなく、ファイル全体を他のスクリプト上に呼び出すのであれば、元のファイルの先ほど入れた特別な呼び出しもとの下に作った関数を並べることによって、呼び出したい関数にミスがないか、きちんと思った通りに作用しているかの確認場所としても使えます。ifの中に書かれたコードは他のスクリプト上に呼び出した時に呼び出されないことが利点で元のスクリプトを走らせた時にだけ結果が表示されます。
Part7に続きます(不定期)。