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の言語仕様や正しいユースケースに沿った使い方を学ぶなら、

Pythonを深く網羅的に学ぶためには以下の書籍がオススメです。

 

この書籍はPythonについてかなり深く、そして丁寧に書かれています。

Python の基本文法だけでなく、

いかにして Python の持つ力を最大限引き出せるかという視点で書かれています。

 

Python 初心者はもちろん、すでに Python を使える方にもオススメの一冊です。

エンジニアとしての自身の価値をチェックする(完全無料)

エンジニアとして、

自分の価値がどれくらいのものかご存知でしょうか?

 

エンジニアとしてIT業界に身を置いていると

今の会社でずっと働くのか、フリーランスとして独立するのか …

と様々な選択肢があります。

 

どの選択肢が正解なのかを見極めるためにも、選択肢を広げるためにも

自身の価値を知っておくことはとても重要です。

 

TechClips ME では、

職務経歴書をアップロードするだけで企業からのスカウトを受けることができます。

▼▼▼▼▼

▲▲▲▲▲

しかもTechClips MEでは想定年収を企業から提示してくれるので、

自身の価値を数字で分かりやすくたしかめることができます。

 

登録はもちろん完全無料なので、一度登録してみると良いかもしれません。

 

コメント

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