Python の関数 (Functions)
1. 関数の基本
関数とは、呼び出されたときにのみ実行されるコードのブロックです。
関数には「引数」として知られるデータを渡すことができます。また、関数は結果としてデータを返すこともできます。
1.1 関数の作成
Python では、def キーワードを使用して関数を定義します。
def my_function():
print("関数からの挨拶です")1.2 関数の呼び出し
関数を呼び出すには、関数名の後に括弧を付けます。
def my_function():
print("関数からの挨拶です")
# 関数の実行
my_function()2. 引数 (Arguments)
情報は「引数(アーギュメント)」として関数に渡すことができます。引数は関数名の後の括弧内に指定します。引数はいくつでも追加でき、カンマで区切るだけです。
2.1 引数の使用例
以下の例は、1 つの引数(fname)を持つ関数です。関数が呼び出されると、名前を渡し、それが関数内でフルネームを出力するために使用されます。
def my_function(fname):
print(fname + "・レフネス")
my_function("エミル")
my_function("トビアス")
my_function("ライナス")注意: アーギュメント(Arguments)は、しばしば「args」と略されます。
2.2 パラメータとアーギュメントの違い
「パラメータ(Parameter)」と「アーギュメント(Argument)」という用語は、関数に渡される情報のことを指しますが、Python の観点からは以下の違いがあります。
- パラメータ: 関数定義の括弧内にリストされている変数のこと。
- アーギュメント: 関数が呼び出される際に、関数に送られる値のこと。
2.3 引数の数
デフォルトでは、関数は正しい数の引数で呼び出される必要があります。つまり、関数が 2 つの引数を期待している場合、2 つ(それ以上でも以下でもない)の引数で関数を呼び出す必要があります。
# 2つの引数を期待する関数
def my_function(fname, lname):
print(fname + " " + lname)
my_function("エミル", "レフネス")3. 柔軟な引数指定
3.1 任意引数 (*args)
関数に渡される引数の数がわからない場合は、関数定義のパラメータ名の前に * を追加します。これにより、関数は引数の「タプル」を受け取り、それに応じて各項目にアクセスできます。
def my_function(*kids):
print("一番年下の子は " + kids[2] + " です")
my_function("エミル", "トビアス", "ライナス")3.2 キーワード引数 (Keyword Arguments)
「キー = 値」という構文を使用して引数を送ることもできます。この方法では、引数の順序を気にする必要はありません。
def my_function(child3, child2, child1):
print("一番年下の子は " + child3 + " です")
my_function(child1 = "エミル", child2 = "トビアス", child3 = "ライナス")3.3 任意キーワード引数 (**kwargs)
関数に渡されるキーワード引数の数がわからない場合は、パラメータ名の前に ** を追加します。これにより、関数は引数の「辞書(dict)」を受け取ります。
def my_function(**kid):
print("彼の苗字は " + kid["lname"] + " です")
my_function(fname = "トビアス", lname = "レフネス")4. パラメータのデフォルト値とデータ型
4.1 デフォルトパラメータ値
引数なしで関数を呼び出した場合、デフォルト値が使用されます。
def my_function(country = "ノルウェー"):
print("私の出身は " + country + " です")
my_function("スウェーデン")
my_function("インド")
my_function() # デフォルト値が使用される
my_function("ブラジル")4.2 引数としてのリスト
関数には任意のデータ型の引数(文字列、数値、リスト、辞書など)を送ることができ、関数内部ではそのデータ型として扱われます。
def my_function(food):
for x in food:
print(x)
fruits = ["リンゴ", "バナナ", "チェリー"]
my_function(fruits)5. 戻り値と pass 文
5.1 戻り値 (Return Values)
関数に値を返させるには、return ステートメントを使用します。
def my_function(x):
return 5 * x
print(my_function(3))
print(my_function(5))
print(my_function(9))5.2 pass 文
関数定義(def)を空にすることはできません。何らかの理由で内容がない関数を作成する場合は、pass 文を入れてエラーを回避します。
def myfunction():
pass6. 位置専用引数とキーワード専用引数
関数の引数が「位置のみ」で渡されるべきか、あるいは「キーワードのみ」で渡されるべきかを指定できます。
6.1 位置専用引数 (Positional-Only Arguments)
引数の後に , / を追加することで、その引数が位置専用であることを指定できます。
def my_function(x, /):
print(x)
my_function(3)
# my_function(x = 3) とするとエラーになります6.2 キーワード専用引数 (Keyword-Only Arguments)
引数の前に *, を追加することで、その引数がキーワード専用であることを指定できます。
def my_function(*, x):
print(x)
my_function(x = 3)
# my_function(3) とするとエラーになります6.3 混在させる場合
同じ関数内で両方のルールを組み合わせることができます。/ の前にある引数は位置専用、* の後にある引数はキーワード専用となります。
def my_function(a, b, /, *, c, d):
print(a + b + c + d)
my_function(5, 6, c = 7, d = 8)7. 再帰 (Recursion)
Python は「関数の再帰(Recursion)」もサポートしています。これは、関数が自分自身を呼び出すことができるという概念です。
再帰は数学やプログラミングにおいて一般的な概念であり、データをループして結果に到達するために使用されます。ただし、非常に注意深く記述しないと、無限に実行される関数を作成してしまったり、過剰なメモリやプロセッサ電力を使用したりする可能性があります。
7.1 再帰関数の例
tri_recursion() は、自分自身を呼び出すように定義した関数です。変数 k をデータとして使用し、再帰するたびに k を 1 ずつ減らします。条件が 0 より大きくなくなったときに再帰が終了します。
def tri_recursion(k):
if(k > 0):
result = k + tri_recursion(k - 1)
print(result)
else:
result = 0
return result
print("\n\n再帰の実行結果:")
tri_recursion(6)