関数は、モジュール化され再利用可能なPythonコードの基礎です。このチュートリアルでは、関数引数の詳細を掘り下げ、よりクリーンで効率的で、エラーの少ないプログラムを作成するための知識を身につけます。
目次
位置引数
位置引数は最も単純な形式です。関数の定義順に引数が渡されます。順序は厳密に守られなければならず、関数呼び出し時の引数の順序が間違っていると、不正な結果やエラーが発生します。
def greet(name, greeting):
print(f"{greeting}, {name}!")
greet("Alice", "Hello") # 正しい順序
greet("Hello", "Alice") # 間違った順序 - "Alice, Hello!"と出力される
キーワード引数
キーワード引数を使用すると、関数を呼び出す際に引数名を指定できます。これにより、コードの可読性が高まり、特にパラメータの多い関数を使用する場合にエラーが発生しにくくなります。キーワード引数の順序は関係ありません。
def describe_pet(animal_type, pet_name, age=None):
print(f"nI have a {animal_type}.")
print(f"My {animal_type}'s name is {pet_name.title()}.")
if age:
print(f"My {animal_type} is {age} years old.")
describe_pet(animal_type='hamster', pet_name='harry')
describe_pet(pet_name='willie', animal_type='dog', age=5)
デフォルト引数
デフォルト引数は、関数パラメータのデフォルト値を提供します。関数を呼び出す際に値が提供されない場合、デフォルト値が使用されます。デフォルト引数は、関数定義では常にデフォルトではない引数の後に配置する必要があります。
def power(base, exponent=2):
return base ** exponent
print(power(3)) # 出力: 9 (exponentはデフォルトで2)
print(power(3, 3)) # 出力: 27
可変長引数 (*args と **kwargs)
*args
と **kwargs
の構文を使用すると、可変数の位置引数とキーワード引数をそれぞれ処理できます。*args
は位置引数をタプルに、**kwargs
はキーワード引数を辞書に収集します。
def my_function(*args, **kwargs):
print("位置引数:", args)
print("キーワード引数:", kwargs)
my_function(1, 2, 3, name="Alice", age=30)
可変オブジェクトと不変オブジェクト
関数引数を使用する際には、可変性に関する理解が不可欠です。不変オブジェクト(数値、文字列、タプルなど)は関数内で変更できません。変更を加えると新しいオブジェクトが作成されます。可変オブジェクト(リスト、辞書など)はインプレースで変更でき、関数外の元のオブジェクトに影響を与えます。これは、注意深く処理しないと予期せぬ副作用につながる可能性があります。
def modify_list(my_list):
my_list.append(4) # 元のリストを変更する
my_list = [1, 2, 3]
modify_list(my_list)
print(my_list) # 出力: [1, 2, 3, 4] (元のリストが変更されている)
def modify_string(my_string):
my_string += "!!!" # 新しい文字列を作成する
my_string = "Hello"
modify_string(my_string)
print(my_string) # 出力: Hello (元の文字列は変更されていない)
この包括的なガイドは、Pythonの関数引数を使用するための堅実な基礎を提供します。これらの概念を習得することで、コードの品質と保守性を大幅に向上させることができます。