Python - デフォルト引数
こんにちは、Pythonプログラマー志願者の皆さん!今日は、Pythonのデフォルト引数の素晴らしい世界に飛び込んでいきましょう。あなたの親しみのある近所のコンピュータサイエンスの先生として、私はあなたをこの旅のガイドすることを楽しみにしています。だから、お気に入りの飲み物を持って、快適に座り、一緒にこのPythonの冒険に出かけましょう!
デフォルト引数とは?
具体的に進む前に、基本的なことから始めましょう。デフォルト引数は、Pythonで関数のパラメータに事前設定された値を定義するための便利な機能です。これらの値は、関数を呼び出す際に特定の値を提供しない場合に使用されます。
デフォルト引数を安全ネットと考えてください。それらは、値を指定することを忘れた場合にあなたを捕まえ、関数がまだスムーズに実行できるようにします。それは、ピクニックにいつも余分なお弁当を持ってくる友達のようです - 必ずしも必要ではないが、たとえばあると嬉しいですよね!
なぜデフォルト引数を使用するのか?
- あなたのコードをより柔軟にします。
- 提供する必要がある引数の数を減少させます。
- 関数に新しいパラメータを追加する際に後方互換性を維持するのに役立ちます。
では、実際にどのように動作するのかを見ていきましょう!
デフォルト引数の例
簡単な例から始めましょう。人々に挨拶する関数を作成すると仮定します:
def greet(name, greeting="Hello"):
return f"{greeting}, {name}!"
# 関数の使用
print(greet("Alice"))
print(greet("Bob", "Hi"))
出力:
Hello, Alice!
Hi, Bob!
この例では、greeting
がデフォルト引数です。特定の挨拶を指定しない場合、関数はデフォルトで"Hello"を使用します。以下に分解してみましょう:
-
greet
関数をname
とgreeting
の2つのパラメータで定義しました。 -
greeting
のデフォルト値は"Hello"です。 -
greet("Alice")
を呼び出す際に、私たちはname
だけを提供します。挨拶にはデフォルトの"Hello"が使用されます。 -
greet("Bob", "Hi")
を呼び出す際に、私たちはname
とgreeting
を両方提供し、関数はデフォルトの代わりに"Hi"を使用します。
キーワード引数なしで関数を呼び出す例
では、少し複雑な例を見ていきましょう。ショッピングカートのアイテムの合計価格を計算する関数を作成します:
def calculate_total(items, tax_rate=0.08, discount=0):
subtotal = sum(items)
total = subtotal * (1 + tax_rate) - discount
return round(total, 2)
# 関数の使用
cart1 = [10, 20, 30]
print(calculate_total(cart1))
print(calculate_total(cart1, 0.10))
print(calculate_total(cart1, 0.10, 5))
出力:
64.80
66.00
61.00
以下に分解してみましょう:
-
calculate_total
関数には3つのパラメータがあります:items
(必須)、tax_rate
(デフォルト0.08)、discount
(デフォルト0)。 - 最初の呼び出しでは、
items
だけを提供します。関数はデフォルトの税率と無料の割引を使用します。 - 二回目の呼び出しでは、
items
とカスタム税率0.10を提供します。割引はまだ0です。 - 三回目の呼び出しでは、すべての3つの引数:
items
、税率、および5の割引を提供します。
覚えておくべきことは、キーワード引数なしで関数を呼び出す際に、順序が重要です!Pythonは、引数が提供された順序でパラメータに値を割り当てます。
可変オブジェクトをデフォルト引数として使用する
ここで、少しトリッキーな状況になります。リストや辞書のような可変オブジェクトをデフォルト引数として使用すると、予期しない動作を引き起こす可能性があります。以下にその意味を示します:
def add_item(item, shopping_list=[]):
shopping_list.append(item)
return shopping_list
print(add_item("apple"))
print(add_item("banana"))
print(add_item("cherry"))
出力:
['apple']
['apple', 'banana']
['apple', 'banana', 'cherry']
驚き!リストは各呼び出しで増え続けます。これは、デフォルトのリストが関数が定義されたときに一度だけ作成され、関数が呼び出されるたびに新しく作成されるのではないため起こることです。
これを避けるために、デフォルトにNone
を使用し、関数内で新しいリストを作成することができます:
def add_item(item, shopping_list=None):
if shopping_list is None:
shopping_list = []
shopping_list.append(item)
return shopping_list
print(add_item("apple"))
print(add_item("banana"))
print(add_item("cherry"))
出力:
['apple']
['banana']
['cherry']
もっと良くなった!今では各呼び出しで新しいリストが作成されるようになりました。
Pythonデフォルト引数のまとめ
学んだことを以下のテーブルで簡単にまとめましょう:
概念 | 説明 | 例 |
---|---|---|
基本的なデフォルト引数 | パラメータにデフォルト値を提供する | def greet(name, greeting="Hello"): |
複数のデフォルト引数 | 関数に複数のデフォルト引数を持つことができる | def calculate_total(items, tax_rate=0.08, discount=0): |
引数の順序 | デフォルト引数よりも必須引数が関数定義の前に来なければならない | def func(required, optional=default): |
可変デフォルト引数 | 可変オブジェクトをデフォルト引数として使用するのを避ける | デフォルトにNone を使用し、オブジェクトを関数内で作成する |
キーワード引数 | 任意の順序で名前付き引数を持って関数を呼び出すことができる | calculate_total(items=[10, 20], discount=5) |
それでは、皆さん!デフォルト引数でPythonスキルをレベルアップしました。どんな強力なツールも、賢く使用することが重要です。それらは、コードをより柔軟で簡単に使用できるようにすることができますが、可変デフォルトには注意が必要です!
続けて練習し、好奇心を失わずに、幸せなコーディングを!次回までには、プロのようにPythonを書けるようになっていることでしょう。それでは、また次回お会いしましょう!これで、あなたの親しみのある近所のCS先生、おしまいです!
Credits: Image by storyset