Pythonの引数(arguments)とは?種類やコマンドラインの引数、応用例も徹底解説
Pythonプログラミングで「引数」は関数の柔軟性を高める重要な要素です。引数とは関数に渡すデータのことで、同じ関数でも異なるデータを処理できるようにします。
本記事では、引数の基本概念から位置引数、キーワード引数などの種類と使い方を解説します。さらに実践的な応用例や、よくあるエラーの対処法も紹介します。
引数を適切に活用すると、読みやすく保守性の高いコードが書けるようになります。
Contents
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プログラミングスキルを向上させてください。



