皆さん、関数は使っていますか?
大きめのプログラムを書くようになると、同じ用な処理を何度も行ったり、1つの処理に膨大なコードを書く場合が出てくると思います。
そこで、まとまった処理を関数にすると、コードの可読性や汎用性を上げることができます。
本記事では、Pythonにおける関数の作り方、運用方法について解説します!
目次
関数の定義方法
Pythonでは、関数は次のように定義します。
引数と返り値は必須ではありません。
関数名の後にはコロンを忘れずに書きましょう。
簡単な例を次に示します。
def Hello(): #関数名
print("Hello! World") #処理
Hello() #関数実行
#実行結果
#Hello! World
このように、定義した関数を呼び出すことで、関数内に記述した処理を好きなタイミングで実行できます。
返り値を指定
引数と返り値を使用する場合は次のように記述します。
この例では受け取った2つの文字列の間に半角スペースを入れて結合し、コンソールに結合した文字列を表示しています。
def word_output(word_A, word_B): #関数名
#処理
output = word_A + " " +word_B
return output
word = word_output("Goodbye!", "World") #関数実行
print(word)
#実行結果
#Goodbye! World
カッコ内に関数内で使用する引数を記述します。
複数の引数を使用する場合は「,」で区切ります。
また、今回の例では返り値を記述することで、関数から返ってきた値が変数wordに代入されています。
注意点としては、Pythonでは関数の定義は関数実行より前に行う必要があります。
C言語などとは違い、プロトタイプ宣言はありませんので注意してください。
引数の設定方法
また、引数にはデフォルトの値を設定することもできます。
def word_output(word_A = "Hello!", word_B = "World"): #関数名
#処理
output = word_A + " " +word_B
return output
word = fc.word_output() #関数実行
print(word)+
#実行結果
#Hello! World
引数にデフォルトの値を設定した場合は、引数を渡さずに関数を呼び出したときにその値を使用して処理が行われます。
また、次に示すように変数名 = 引数といった形で引数を渡す、キーワード引数という方法もあります。
def word_output(word_A = "Hello!", word_B = "World"): #関数名
#処理
output = word_A + " " +word_B
return output
word = fc.word_output(word_B="World", word_A="Goodmorning!") #関数実行
print(word)
#実行結果
#Goodmorning! World
通常、呼び出した関数に渡す引数の順番、は関数を定義したときの引数の順番に従う必要があります。しかし、キーワード引数を使用した場合は、引数を渡す順番は任意です。
関数を外部から読み込む方法
先ほど説明したように、関数は使用前に定義する必要があります。
しかし、処理が長い関数を定義したり、複数の関数を定義すると、なかなかメインのコードにたどり着けなかったり、可読性が低下したりとデメリットが大きいです。
そこで、関数を別ファイルにまとめて記述して、外部ファイルとして読み込んで使用します。
ファイルは次のようにメインのファイルと同じ階層に置きます。
関数を使用するには、ライブラリをインポートする時のようにインポートします。
import ファイル名でインポートし、ファイル名.関数名で関数を使用できます。
また、as 任意の名前で任意の名前.関数名といった使い方ができます。
import func as fc #import ファイル名 (as 任意の名前)
word = fc.word_output("Goodbye!", "World") #関数実行
print(word)
また、関数を記述したファイルを別のフォルダに配置した場合は次のような構成にします。
この場合は次のようにfrom フォルダ名 import ファイル名でインポートできます。
from function import func as fc
word = fc.word_output("Goodbye!", "World") #関数実行
print(word)
実際にどう使うかについては、ぜひほかの記事のサンプルコードも参考にしてください!
PythonアプリのGUIをHTMLで作る方法【Python】
実務では
自作の関数を使用すること自体に大きな意味はありません。
重要なのは関数をどのように設計して、どのように使用するかです。
関数設計のコツとしては、汎用性やエラーへの対処のしやすさを上げるために、1つの関数には1つの機能を搭載させることです。
まずは例を示します。
def data_processing(data, flag):
if flag == "clean":
return clean_data(data) #データを前処理
elif flag == "analyze":
return analyze_data(data) #データを解析
else:
raise ValueError("Invalid flag") #raiseで例外を発生させる
この関数では、flagの値によってdataをclean_data()やanalyze_data()に引数として渡すように設計されています。
しかし、このような設計では、例えばdataの型が原因でエラーが発生した場合、clean_data()でエラーが発生したのか、analyze_data()でエラーが発生しているのか毎度確認しなければなりません。
しかし、次のように関数を小分けにして使用することで、エラーの特定が容易になります。
# 良い例
def clean_data(data):
##################
# データの前処理
##################
def analyze_data(data):
##################
# データを解析
##################
if flag == "clean":
return clean_data(data) #データを前処理
elif flag == "analyze":
return analyze_data(data) #データを解析
処理すべてを関数にする必要はありません。
汎用性や保守性などを考えて、適切に関数を設計しましょう!
おわりに
いかがだったでしょうか。
より詳しく解説して欲しい部分や分かりづらかった部分があればコメントしていただけると幸いです!
最後まで読んでいただきありがとうございました。
コメントを残す