よろずやIT
プログラミング

関数の引数とは?位置引数・キーワード引数・デフォルト値をPythonで解説

執筆・監修:よろずやIT編集部|編集方針を見る

結論:まずここだけ読めばOK

詳しい手順・原因は、この下で解説しています。

プログラミングのイラスト

結論: 引数は、関数に渡す値です。位置引数は順番で、キーワード引数は名前を指定して渡します。デフォルト値を決めておくと、引数を省略できます。引数の数や名前が合わないとTypeErrorになりますが、メッセージが原因を教えてくれます。デフォルト値に、リストを使ってはいけません(呼び出しのたびに、同じものが使い回されるため)。

引数とは

関数は、「値を受け取って、処理をして、結果を返す」ものです。受け取る値が、引数です。

def greet(name):
    print("こんにちは", name)

greet("田中")   # こんにちは 田中

関数の基本は、関数とはをご覧ください。

引数の3つの渡し方

位置引数、キーワード引数、デフォルト値の3つの渡し方を、greet関数の例で示した図解

def greet(name, greeting="こんにちは"):
    print(greeting, name)

① 位置引数:順番で渡す

greet("田中")   # こんにちは 田中

関数の定義と、同じ順番で渡します。

② キーワード引数:名前を指定して渡す

greet(greeting="こんばんは", name="田中")   # こんばんは 田中

名前を付けて渡すので、順番を気にしなくて済みます。読みやすく、順番の間違いも防げます。

③ デフォルト値:省略した時の値

greeting="こんにちは" のように、あらかじめ値を決めておくと、呼び出す時に、省略できます。

greet("田中")                 # greetingを省略 → こんにちは
greet("田中", "おはよう")      # おはよう 田中

デフォルト値のある引数は、後ろにまとめて書きます(デフォルト値のない引数の前に置くと、エラーになります)。

def f(greeting="こんにちは", name):   # エラー

引数のエラーと、直し方

引数が足りない、多すぎる、存在しない名前を指定した、デフォルト値にリストを使った時の症状と直し方を示した図解

エラーメッセージ 原因 直し方
missing 1 required positional argument 必要な引数が足りない 引数を足す。または、デフォルト値を決める
takes 2 positional arguments but 3 were given 引数が多すぎる 関数の定義と、呼び出しの数をそろえる
got an unexpected keyword argument 存在しない名前を指定した 引数の名前の綴りを確認する
greet()
# TypeError: greet() missing 1 required positional argument: 'name'

エラーメッセージの読み方は、エラーメッセージの正しい読み方・調べ方をご覧ください。

注意:デフォルト値に、リストを使わない

エラーにならずに、おかしな動きをする、有名な落とし穴です。

def add_item(item, items=[]):
    items.append(item)
    return items

print(add_item("りんご"))   # ['りんご']
print(add_item("みかん"))   # ['りんご', 'みかん']  ← 前回の内容が残っている

デフォルト値は、関数を定義した時に、1度だけつくられます。リストは、あとから中身を変えられるため、呼び出しのたびに、同じリストが使い回されます。

直し方:Noneにして、関数の中でつくる

def add_item(item, items=None):
    if items is None:
        items = []
    items.append(item)
    return items

print(add_item("りんご"))   # ['りんご']
print(add_item("みかん"))   # ['みかん']

None は「何もない」を表す値です。辞書(dict)をデフォルト値にする場合も、同じ書き方にします(辞書(dict)型とは)。

引数が増えてきたら

*args と **kwargs(参考)

引数の個数が決まっていない時に、まとめて受け取る書き方です。

def total(*args):
    return sum(args)

print(total(1, 2, 3))   # 6

便利ですが、まずは、通常の引数で書き、必要になってから学べば十分です。

引数と変数の範囲

関数の引数は、その関数の中だけで使える変数です。関数の外の変数との関係は、スコープ(変数の有効範囲)とはで解説しています。関数の外の値を、中で書き換えたい時は、引数で渡し、戻り値で返すのが基本です。

まとめ

関連記事:関数とは、スコープ(変数の有効範囲)とは、辞書(dict)型とは、再帰とは、エラーメッセージの正しい読み方・調べ方

PRPython イラストで学ぶIT入門 Python初心者と新人SEのための実務につながる基礎学習ガイド【電子書籍】[ 高市 勇気 ]

Python イラストで学ぶIT入門 Python初心者と新人SEのための実務につながる基礎学習ガイド【電子書籍】[ 高市 勇気 ]

¥990

楽天で見る
SHAREXLINEはてブ

よくある質問

Q.引数と、パラメータは、何が違いますか?

A.関数を定義する時の、受け取る側の名前を『パラメータ(仮引数)』、関数を呼び出す時に、実際に渡す値を『引数(実引数)』と区別することがあります。ただし、実際の会話や入門書では、どちらも『引数』と呼ぶことが多く、気にしなくて大丈夫です。

Q.位置引数とキーワード引数は、どう使い分けますか?

A.引数が少なく、順番が自然なら、位置引数で十分です。引数が多い場合や、意味が分かりにくい値(True/Falseなど)を渡す場合は、キーワード引数にすると、読みやすく、順番の間違いも防げます。

Q.missing 1 required positional argumentというエラーが出ました。

A.関数が必要としている引数が、1つ足りないというエラーです。呼び出しの引数の数を確認するか、関数の定義で、その引数にデフォルト値を決めておきます。

Q.デフォルト値にリストを使うと、なぜいけないのですか?

A.デフォルト値は、関数を定義した時に、1度だけつくられます。リストのような、あとから中身を変えられるものをデフォルト値にすると、関数を呼ぶたびに、同じリストが使い回され、前回の内容が残ってしまいます。デフォルトはNoneにして、関数の中で新しいリストをつくるのが定石です。

Q.*argsと**kwargsは、何ですか?

A.引数の個数が決まっていない時に、まとめて受け取る書き方です。*argsは、位置引数をタプルとして、**kwargsは、キーワード引数を辞書として、受け取ります。便利ですが、初心者のうちは、通常の引数で書き、必要になった時に、学ぶのがおすすめです。

関連記事

プログラミング用語解説

ループ(繰り返し)とは?for文とwhile文の違いをPythonで図解

ループとは、同じ処理を繰り返す仕組みです。for文とwhile文の違い、使い分け、break・continue、リストの繰り返し、止まらない『無限ループ』の原因と対処を、Pythonの短いコードと図解で解説します。

プログラミング用語解説

条件分岐(if文)とは?if・elif・elseの書き方をPythonで図解

条件分岐(if文)とは、条件によって、実行する処理を切り替える仕組みです。if・elif・elseの書き方、比較演算子、andとor、よくあるつまずき(=と==、elifの順序、インデント)を、Pythonの短いコードと図解で解説します。

プログラミング用語解説

Base64とは|暗号化ではない理由と、メール・JWT・画像で使われる場面

Base64は、データを英数字だけの形に変換する方式です。暗号化ではなく、誰でも元に戻せます。変換の仕組み、使われる場面、データが約3分の1増える理由、パスワードの保護に使ってはいけない理由を解説します。

プログラミング手順・使い方

AIが書いたコードをそのまま使ってはいけない理由|レビューで見る5つのチェック

AIはコードもすぐ書いてくれますが、「動く」ことと「安全で、後から直せる」ことは別です。秘密情報、存在しない関数、想定外の入力、テスト、説明できるかの5つのチェックと、小さく試す進め方を実務の視点で整理します。

最新のIT関連書籍 トップ10

PR / 楽天市場の売れ筋ランキングを定期的に取得しています。価格は変動する場合があるため、購入前に各ストアでご確認ください。