関数¶
関数とは¶
関数とは 処理に名前をつけたもの です。 値を渡す と、 結果を返し ます。
処理の流れは、以下のようになります。
引数 と呼ばれるデータを受け取る。
定められた処理を行う。
結果を返す
関数 print()
は引数 x
を指定して、x
の値を表示
x = 10
print(x) # -> 10
関数 len()
は引数 list_x
の要素数を返す
list_x = [1, 3, 5, 7]
y = len(list_x)
print(y) # -> 4
詳しくは 関数を定義する も参照してください。
関数の定義¶
関数 はいくつかのステートメント(処理)を1つのまとまりにし、名前をつけたものです。
関数は
def
文で定義されます。関数に値を渡せます。渡す値を 引数 と呼びます。引数は省略可能です。
関数は呼び出された時に、実行されます。関数名の後ろにカッコ(
()
)をつけます。
def 関数名(引数1, 引数2, ....):
ステートメント1
ステートメント2
関数名()
例
def say_hello(name):
print('Hello,', name)
say_hello('Joy')
# Hello, Joy と表示
say_hello('Mary')
# Hello, Mary と表示
命名について¶
関数名、引数名は変数と同じように命名できます。
詳しくは、変数の命名規則 を参照ください。
戻り値¶
関数の処理結果を呼び出し元で利用できます。戻ってくる処理結果を 戻り値 と呼びます。
return
文を実行すると、関数の呼び出し元に指定した値を戻します。
return 戻り値
return
文に複数の値を指定すると、複数の戻り値を戻せます。
return 戻り値1, 戻り値2
呼び出し元で戻り値を受ける変数を複数にすることで、1つ目の変数に戻り値1の値、2つ目の変数に戻り値2の値が代入されます。
モジュールの関数呼び出し¶
モジュールに存在する自作の関数を呼び出して利用できます。
モジュールはPythonの定義や文が入ったファイルです。ファイル名はモジュール名に接尾語 .py
を付けます。
say.py (呼び出されるモジュール)
def say_hello():
print('Hello, World')
if __name__ == '__main__':
# 関数の呼び出し
print('関数の呼び出し')
say_hello()
main.py (呼び出すほう)
from say import say_hello # sayモジュール内の関数say_helloを使えるようにしている
say_hello() # 実際に使っている箇所
main.pyを実行
Hello, World
say.pyを実行
関数の呼び出し
Hello, World
if __name__ == '__main__':
以下の記述は、そのファイル自体が呼ばれたときのみ実行されます。
if __name__ == ‘__main__' : について解説¶
最初に、Pythonには実行される時に最初から値が代入されている特別な変数があります。 __name__
も特別な変数の1つです。
何が代入されているかというとモジュール名(今回だと say
)が入っています。
しかし、モジュールとして import
されるのではなく、直接記述のあるファイルを実行した場合だけ特別に __main__
という文字列が代入されます。
これで、ファイルが import されて使われているのか、直接実行されているかを if __name__ == ‘__main__' :
で見分けることができます。
なぜこのような機能があるかというと、プログラムを書いた時点では import
されて使われるのか、直接実行されるのかわからないからです。
便利な関数は、後で呼び出して利用する場合があります。
そんな時、もともとファイルに書いてある関係ない処理が実行されると使いづらいので、
import
された時は処理が実行されないように if __name__ == ‘__main__' :
を書いておきます。
詳しくは、公式ドキュメントの 29.4. __main__ — トップレベルのスクリプト環境 を参照ください。
確認¶
say.py
に下記を書き足し、実行してみましょう。
say.py
def say_hello():
print('Hello, World')
print('__name__:', __name__) # ←ここを書き足す
if __name__ == '__main__':
# 関数の呼び出し
say_hello()
main.pyを実行
__name__: say
Hello, World
say.pyを実行
__name__: __main__
Hello, World
合わせて、 Pythonのif __name__ == "__main__" とは何ですか?への回答 - PyQオフィシャルブログ をご覧いただくとさらに理解が進みます。