IT・WEB・ゲーム業界の転職に強いR-Stone

転職コラム

Pythonの引数(arguments)とは?種類やコマンドラインの引数、応用例も徹底解説

Pythonプログラミングで「引数」は関数の柔軟性を高める重要な要素です。引数とは関数に渡すデータのことで、同じ関数でも異なるデータを処理できるようにします。

本記事では、引数の基本概念から位置引数、キーワード引数などの種類と使い方を解説します。さらに実践的な応用例や、よくあるエラーの対処法も紹介します。

引数を適切に活用すると、読みやすく保守性の高いコードが書けるようになります。

Pythonの引数について

Pythonの引数(arguments、ひきすう)とは、関数を呼び出す際に関数へ渡すデータです。引数を使うと、同じ関数でも異なるデータを処理でき、プログラムの柔軟性と再利用性が向上します。

関数の基本と定義

Pythonで関数を定義するにはdef文を使用します。関数の基本的な構造は以下のとおりです。

def 関数名(引数):

    “””関数の説明(docstring)”””

    処理内容

    return 戻り値  # 必要に応じて

具体的な例を見てみましょう。

def greet(name):

    “””挨拶をする関数”””

    message = f”こんにちは、{name}さん!”

    return message

 

# 関数の呼び出し

result = greet(“田中”)

print(result)  # 出力: こんにちは、田中さん!

引数の役割

引数は関数の汎用性を高める仕組みです。

引数がない場合、関数は常に同じ処理しかおこなえませんが、引数があるとさまざまな状況に対応できます。

# 引数なしの場合(再利用性が低い)

def calculate_tax_for_100():

    return 100 * 0.1

 

# 引数ありの場合(再利用性が高い)

def calculate_tax(amount, rate=0.1):  # amount, rate: 仮引数

    return amount * rate

 

tax1 = calculate_tax(100)     # 100: 実引数

tax2 = calculate_tax(500, 0.08# 500, 0.08: 実引数

print(tax1,tax2)    # 出力: 10.0 40.0

仮引数は関数定義時に書く引数名で、実引数は関数呼び出し時に実際に渡す値です。

引数の種類

Pythonの関数では、データを受け渡すために複数の引数の種類を使い分けられます。

位置引数(positional arguments)

位置引数は関数呼び出し時に、定義された順序通りに値を渡す必要があります。

def greet(name, age):

    print(f”こんにちは、{name}さん({age}歳)”)

 

greet(“田中”, 25# 正しい順序

greet(25, “田中”# 間違った順序(意図しない結果になる)

デフォルト引数(default arguments)

デフォルト引数は、値が指定されなかった場合に使用される初期値を持つ引数です。

def create_profile(name, age=20, city=“東京”):

    return f”{name}{age}歳、{city}在住)”

 

print(create_profile(“佐藤”))  # 佐藤(20歳、東京在住)

print(create_profile(“田中”, 30))  # 田中(30歳、東京在住)

print(create_profile(“山田”, 25, “大阪”))  # 山田(25歳、大阪在住)

キーワード引数(keyword arguments)

キーワード引数は、引数名を指定して値を渡す方法で、引数の順序に関係なく値を指定できます。

def register_user(name, email, age, department):

    return f”ユーザー登録: {name}{email}{age}歳、{department}部)”

 

# キーワード引数を使用

result = register_user(

    email=“tanaka@example.com”,

    name=“田中太郎”,

    department=“営業”,

    age=28

)

print(result)   # ユーザー登録: 田中太郎(tanaka@example.com、28歳、営業部)

可変長引数(*args, **kwargs)

*argsは複数の位置引数を、**kwargsは複数のキーワード引数を受け取ります。

def calculate_sum(*args):  # 任意の数の引数をリストで受け取る

    total = 0

    for num in args:

        total += num

    return total

 

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

print(calculate_sum(10, 20, 30, 40))  # 100

 

def create_report(**kwargs):  # 任意のキーワード引数を辞書で受け取る

    report = “レポート内容:\n”

    for key, value in kwargs.items():

        report += f”  {key}: {value}\n

    return report

 

print(create_report(name=“田中”, department=“開発”, score=85))

# レポート内容:

#   name: 田中

#   department: 開発

#   score: 85

*args**kwargsは組み合わせて使えます。

def flexible_function(*args, **kwargs):

    print(f”位置引数: {args})

    print(f”キーワード引数: {kwargs})

 

flexible_function(1, 2, 3, name=“佐藤”, age=25)

# 位置引数: (1, 2, 3)

# キーワード引数: {‘name’: ‘佐藤’, ‘age’: 25}

コマンドライン引数について

プログラムを実行する際にコマンドラインから渡される引数です。

import sys

# sys.argv はコマンドライン引数をリストとして受け取ります。

print(f”スクリプト名: {sys.argv[0]})

print(f”引数: {sys.argv[1:]})

 

# python script.py arg1 arg2 で実行した場合

# スクリプト名: script.py

# 引数: [‘arg1’, ‘arg2’]

# より高度な処理には argparse モジュールが便利です。

import argparse

 

parser = argparse.ArgumentParser(description=‘簡単な計算ツール’)

parser.add_argument(‘–num1’, type=int, required=True, help=‘最初の数値’)

parser.add_argument(‘–num2’, type=int, required=True, help=‘2番目の数値’)

parser.add_argument(‘–operation’, choices=[‘add’, ‘subtract’],

                   default=‘add’, help=‘実行する演算’)

 

args = parser.parse_args()

 

if args.operation == ‘add’:

    result = args.num1 + args.num2

else:

    result = args.num1 args.num2

 

print(f”結果: {result})

Pythonを使った引数の応用例

適切な引数設計によって、再利用性が高い関数を作成すると、コード品質が向上します。

いくつか例を見ていきましょう。

複数の引数の組み合わせ例

異なる種類の引数を組み合わせる場合、位置引数→デフォルト引数→*args**kwargsの順で記述します。

def process_data(data, format=‘json’, *options, debug=False, **config):

    “””データ処理関数の例”””

    print(f”データ: {data}# 位置引数

    print(f”形式: {format}# デフォルト引数

    print(f”オプション: {options}# 可変長引数(*args)

    print(f”デバッグ: {debug}# キーワード引数

    print(f”設定: {config}# 可変長引数(**kwargs)

 

# 使用例

process_data(“sample.txt”, “csv”, “option1”, “option2”,

             debug=True, encoding=“utf-8”, delimiter=“,”)

 

# データ: sample.txt

# 形式: csv

# オプション: (‘option1’, ‘option2’)

# デバッグ: True

# 設定: {‘encoding’: ‘utf-8’, ‘delimiter’: ‘,’}

引数を使った便利な関数のパターン

設定値を受け取る関数では、デフォルト引数と**kwargsの組み合わせで、必要な設定のみを指定可能な関数を作成できます。

def connect_database(host=‘localhost’, port=5432, **options):

    “””データベース接続関数”””

    connection_config = {

        ‘host’: host,

        ‘port’: port,

        **options  # timeout, ssl_mode など追加オプション

    }

    print(f”接続設定: {connection_config})

    return connection_config

 

# 使用例

db = connect_database(host=‘prod-server’, timeout=30, ssl_mode=‘require’)

# 接続設定: {‘host’: ‘prod-server’, ‘port’: 5432, ‘timeout’: 30, ‘ssl_mode’: ‘require’}

引数に関するよくあるエラーと対処法

Pythonで引数を扱う際、さまざまなエラーが起こりえます。

# 引数の数に関するエラー

def greet(name, age):

    print(f”Hello, {name}! You are {age} years old.”)

 

# エラー例:引数が不足している

greet(“Alice”# TypeError: greet() missing 1 required positional argument: ‘age’

 

# エラー例:引数が多すぎる

greet(“Alice”, 25, “Engineer”# TypeError: greet() takes 2 positional arguments but 3 were given

関数が必要とする引数の数を確認し、正しい数の引数を渡すか、デフォルト引数を使用して柔軟性を持たせます。

引数の順序を間違えるとSyntaxErrorが発生します。

# エラー例:デフォルト引数のあとに位置引数を定義

def calculate(x=10, y):  # SyntaxError: non-default argument follows default argument

    return x + y

 

# 正しい順序

def calculate(y, x=10):

    return x + y

デフォルト引数にリストや辞書などを使用すると、予期しない動作が発生します。

対処法として、デフォルト引数にNoneを使用し、関数内で新しいオブジェクトを作成します。

# 問題のあるコード(items)

def add_item(item, items=[]):

    items.append(item)

    return items

 

print(add_item(“apple”))  # [‘apple’]

print(add_item(“banana”))  # [‘apple’, ‘banana’] – 予期しない結果

 

# 正しい書き方

def add_item(item, items=None):

    if items is None:

        items = []

    items.append(item)

    return items

まとめ

Pythonの引数の基本から応用まで幅広く解説しました。5タイプの引数を理解し、適切に組み合わせると、再利用性の高い関数が設計できます。

ぜひ自分のコードでさまざまな引数タイプを試して、Pythonプログラミングスキルを向上させてください。