pythonのデフォルト引数についての解説

pythonのデフォルト引数についての解説Python
ゆうすけ
ゆうすけ

デフォルト引数って何ですか・・・?

資格マフィア
資格マフィア

デフォルト値を設定した引数のことだ。
実はデフォルト引数にはちょっとした制限もある。

 

✔️ 本記事のテーマ

pythonのデフォルト引数について

 

✔️ 読者さんへの前置きメッセージ

本記事は「pythonのデフォルト引数」について書いています。

 

この記事を読むことで
「デフォルト引数の使い方 や デフォルト引数の注意点」
について理解できます。

 

関数では、引数というものを定義することができます。

 

そして、引数にはデフォルト引数というものがあります。

 

デフォルト引数を定義する上で、
注意点や使い所などに気を付けないとその便利さを正しく活かすことができません。

 

この記事では「デフォルト引数をどうのように使うべきなのか」について解説します。

 

それでは、解説していきましょう。

Pythonのデフォルト引数とは?

Pythonのデフォルト引数とは?

pythonのデフォルト引数とは一言で述べると

デフォルト値を設定した引数

です。

 

コードで解説しましょう。

def sample_func(num=1):
    ret = num * 100
    return ret


result1 = sample_func()
result2 = sample_func(2)

print(result1)
# 100
print(result2)
# 200

上記コードでは関数 sample_func のデフォルト引数として num を定義しています。

 

この numsample_func(2) というように引数で値を渡された場合、
その値を使って関数が動きます。

 

一方で sample_func() というように引数を省略した場合は、
デフォルト値 num=1 を使って関数が動きます。

 

このように、引数として定義しながら、
その引数が省略された場合のデフォルト値を設定するのがデフォルト引数です。

 

Pythonのデフォルト引数の使い道

Pythonのデフォルト引数の使い道

では、デフォルト引数の使いどころはどこにあるのでしょうか?

 

デフォルト引数は

「対象の情報があれば処理を加えたいが、ない場合も考慮したい」

というときに使用します。

 

例えば、以下のような関数があるとします。

def calculate_tax(price):
    tax = price * 0.1
    return tax

これは消費税額を計算する関数です。

 

引数として金額 price を渡すことで、消費税額を算出します。

tax = calculate_tax(100)

print(tax)
# 10

 

ただ、消費税率は基本的に10%なので多くの場合、 tax = price * 0.1 として問題ないですが、
この関数では軽減税率の対象品目や2019年以前の消費税を計算することができません。

 

そこで関数を少し修正します。

def calculate_tax(price, rate):
    tax = price * rate
    return tax

 

税率 rate を引数として渡すことで、
税率が10%以外の場合も正しく計算できるようになりました。

tax = calculate_tax(100, 0.08)

print(tax)
# 8

 

ただ、これでは必ず税率を引数で指定しないといけません。
税率が10%以外というレアケースを救うために、
毎回 rate を指定しないといけないのは使用性の観点であまり正しいとは言えません

 

そこでデフォルト引数を定義します。

def calculate_tax(price, rate=0.10):
    tax = price * rate
    return tax

このようにすることで rate を指定しない場合は税率10%、
rate で指定した場合はその税率で計算するという挙動になります。

 

tax_1 = calculate_tax(100, 0.08)
tax_2 = calculate_tax(100)


print(tax_1)
# 8
print(tax_2)
# 10

デフォルト引数はこのようなユースケースで使われることが多いです。

 

Pythonのデフォルト引数の位置制約

Pythonのデフォルト引数の位置制約

使い方によっては便利なデフォルト引数ですが、
デフォルト引数は定義する上での制約があります。

 

それは以下のような制約です。

デフォルト引数は通常の引数の前に定義してはいけない

 

どういうことかコードで解説しましょう。

# NG 
def calculate_tax(rate=0.10, price):
    ...

# SyntaxError: non-default argument follows default argument

このように、
デフォルト引数(rate=0.10)デフォルト値を設定していない引数(price) より前に定義すると
SyntaxError が発生します。

 

デフォルト引数を定義する場合は最後に定義するようにしましょう。

# OK
def calculate_tax(price, rate=0.10):
    ...

デフォルト値にlistや辞書を設定した場合の注意点

デフォルト値にlistや辞書を設定した場合の注意点

デフォルト引数の挙動上の注意点として、
デフォルト値にlistや辞書を設定した場合には以下の注意点があります。

デフォルト値のlistや辞書は関数定義時に生成され、
該当のデフォルト引数を省略して関数を呼び出すと同一オブジェクトが使用される。

 

文章だと少しややこしいので、コードで示しましょう。

def sample_default(value, sample_list=[0, 1, 2]):
    sample_list.append(value)
    print(sample_list)


# 引数を省略しない場合
sample_default(3, [10, 11, 12])
sample_default(4, [10, 11, 12])
sample_default(5, [10, 11, 12])
# [10, 11, 12, 3]
# [10, 11, 12, 4]
# [10, 11, 12, 5]

# 引数を省略した場合
sample_default(3)
sample_default(4)
sample_default(5)
# [0, 1, 2, 3]
# [0, 1, 2, 3, 4]
# [0, 1, 2, 3, 4, 5]

 

コード中の print() 出力が示すように、
# 引数を省略しない場合value で指定した数だけが sample_list に追加されています。

 

一方、 # 引数を省略しない場合 はそれ以前に関数を呼び出した際の引数が全て sample_list に追加されたままになっています。

 

このように引数を省略した場合、
それ以前に呼び出したときに生成されたlistを使い回します。

Pythonについて基礎からしっかり学ぶなら

Pythonについて基礎からしっかり学ぶなら

Pythonのデフォルト引数について解説しました。

 

Pythonの言語仕様や正しいユースケースに沿った使い方を学ぶなら、
Udemyの教材がオススメです。

>> 現役シリコンバレーエンジニアが教えるPython 3 入門 + シリコンバレー流コードスタイル

 

Udemyは動画ベースで学習ができるので、
実際のコードや図解を見ながら、学習を進めることができます。

 

さらに今なら30日間返金保証がついているので、
一度購入して自分の思っていたものと違った場合は費用がかかりません。

 

この教材はPythonの基礎から応用まで徹底的に解説しています。
また、現役シリコンバレーエンジニアによる本格的な解説も魅力です。

 

10000近く購入されているにも関わらず、
評価が4.4以上もあることからもその質の高さが分かると思います。

 

また、Pythonについて基礎から学ぶのであれば、オンラインスクールがオススメです。


オンラインスクールで学習すると、講義も分かりやすく、
サポート体制もしっかりしているので、これからPythonを学ぶ人にもオススメです。


オンラインで無料レッスンを体験することもできるので、
自分にあっているかどうかを確かめることができます。


オススメは以下の3つです。
どのスクールも無料体験が用意されているので、
契約前に自分に最適なスクールを探すことができるでしょう。

✔️オススメのプログラミングスクール ベスト3

プログラミングスクールについては「プログラミングスクールで失敗しないためには【オススメベスト3も紹介】」の記事でも紹介しています。


気になった方はぜひチェックしてみて下さい〜!

コメント

タイトルとURLをコピーしました