ray88’s diary

お仕事で困ったとき用の自分用の覚書

Python 引数の受け取り方② 引数の個数を固定しない関数

python 目次 - ray88’s diary
各種目次 - ray88’s diary
■引数の個数を固定しない(可変長の引数)関数

■引き数をタプルで受け取る(*args)
*args のように引数名の前に「*」を付けると、引数argsに渡された値がタプルにまとめて入る。 なお、引数名は「args」である必要はない。
【書式】

def 関数名(*args):
    ステートメント

【サンプルコード】

def output_items(*items):
    print(items)

#使用例
output_items() #引数なしの場合
output_items("りんご","みかん","ばなな") #引数が3個の場合

出力結果
受け取った値はタプルに入る

■最初の2個は必須の引数。残りはオプション
必須の引数と可変長の*argsを組み合わせることもできる。
【サンプルコード】
関連URL:Python リストの要素(文字列)を連携して文字列を作成 join() - ray88’s diary

# 2. 最初の2個は必須の引数、残りはオプション
def greet_friends(name, age, *friends):
    message = f"{name}さん({age}歳)の友達:"
    if friends:
        return message + "、".join(friends)
    else:
        return message + "なし"

print(greet_friends("太郎", 25))                    # 太郎さん(25歳)の友達:なし
print(greet_friends("花子", 30, "佐藤", "田中"))    # 花子さん(30歳)の友達:佐藤、田中

出力結果

■キーワード引数をまとめて辞書に変換して受け取る
  **keywords のように引数名の前に「**」を付けると、引数の名前がそのまま辞書のキーになり、引数の値がそのキーの値になる。なお、引数名は「args」である必要はない。
【サンプルコード】

# 3. 複数のキーワード引数をまとめて辞書で受け取る (**kwargs)
def create_profile(**info):
    profile = []
    for key, value in info.items():
        profile.append(f"{key}: {value}")
    return "、".join(profile)

print(create_profile(名前="山田", 職業="エンジニア"))              # 名前: 山田、職業: エンジニア
print(create_profile(名前="鈴木", 年齢=28, 趣味="読書", 出身="東京"))  # 名前: 鈴木、年齢: 28、趣味: 読書、出身: 東京

出力結果

■ 必須引数とキーワード引数を組み合わせ

# 4. 必須引数とキーワード引数を組み合わせ
def build_user_data(user_id, name, **details):
    user_data = {
        "id": user_id,
        "name": name
    }
    user_data.update(details)  # キーワード引数を辞書に追加
    return user_data

print(build_user_data(1, "田中"))
# {'id': 1, 'name': '田中'}

print(build_user_data(2, "佐藤", age=35, city="大阪", job="デザイナー"))
# {'id': 2, 'name': '佐藤', 'age': 35, 'city': '大阪', 'job': 'デザイナー'}

出力結果