آرگومان‌های تابع در پایتون

آرگومان‌های موقعیتی، کلیدواژه‌ای، پیش‌فرض، *args و **kwargs در پایتون

انواع آرگومان در پایتون

پایتون انعطاف‌پذیری زیادی در نحوه ارسال آرگومان به توابع دارد.

۱. آرگومان‌های موقعیتی (Positional)

به‌ترتیب به پارامترها اختصاص می‌یابند:

def greet(name, message):
    print(f"{message}، {name}!")

greet("علی", "سلام")  # name="علی"، message="سلام"

۲. آرگومان‌های کلیدواژه‌ای (Keyword)

با نام پارامتر مشخص می‌شوند — ترتیب مهم نیست:

def greet(name, message):
    print(f"{message}، {name}!")

greet(message="سلام", name="علی")  # ترتیب مهم نیست!
greet(name="مریم", message="خوش آمدی")

۳. ترکیب موقعیتی و کلیدواژه‌ای

def greet(name, message, punctuation):
    print(f"{message}، {name}{punctuation}")

greet("علی", message="سلام", punctuation="!")
آرگومان‌های موقعیتی باید قبل از کلیدواژه‌ای بیایند!

۴. مقادیر پیش‌فرض

def greet(name, message="سلام"):
    print(f"{message}، {name}!")

greet("علی")              # سلام، علی!
greet("مریم", "درود")     # درود، مریم!

۵. *args — آرگومان‌های متغیر

وقتی نمی‌دانید چند آرگومان دریافت می‌شود:

def sum_all(*args):
    total = 0
    for num in args:
        total += num
    return total

print(sum_all(1, 2, 3))        # 6
print(sum_all(1, 2, 3, 4, 5))  # 15
print(sum_all())                # 0
*args تمام آرگومان‌ها را به‌صورت یک تاپل دریافت می‌کند.

۶. **kwargs — آرگومان‌های کلیدواژه‌ای متغیر

برای دریافت آرگومان‌های کلیدواژه‌ای نامحدود:

def print_info(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

print_info(name="علی", age=25, city="تهران")
# name: علی
# age: 25
# city: تهران
**kwargs آرگومان‌های کلیدواژه‌ای را به‌صورت دیکشنری دریافت می‌کند.

ترکیب همه انواع

def func(a, b, *args, **kwargs):
    print(f"a={a}, b={b}")
    print(f"args={args}")
    print(f"kwargs={kwargs}")

func(1, 2, 3, 4, x=5, y=6)
# a=1, b=2
# args=(3, 4)
# kwargs={'x': 5, 'y': 6}

Unpacking با * و **

# لیست به آرگومان
def add(a, b, c):
    return a + b + c

numbers = [1, 2, 3]
print(add(*numbers))  # 6

# دیکشنری به kwargs
def greet(name, message):
    print(f"{message}، {name}!")

info = {"name": "علی", "message": "سلام"}
greet(**info)

پارامتر فقط کلیدواژه‌ای (Keyword-only)

با قرار دادن * قبل از پارامتر:

def func(a, *, b):
    print(a, b)

func(1, b=2)   # ✅
# func(1, 2)   # ❌ خطا! b باید کلیدواژه‌ای باشد

مثال کاربردی

# تابعی که هر تعداد عدد را میانگین می‌گیرد
def average(*numbers):
    if not numbers:
        return 0
    return sum(numbers) / len(numbers)

print(average(10, 20, 30))  # 20.0
print(average(5, 10))       # 7.5

خلاصه

نوعسینتکستوضیح
موقعیتیf(1, 2)به ترتیب
کلیدواژه‌ایf(a=1, b=2)با نام
پیش‌فرضdef f(a=1)اختیاری
*argsdef f(*args)متغیر (تاپل)
**kwargsdef f(**kwargs)کلیدواژه (دیکشنری)

این مبحث بخشی از دوره آموزش کامل پایتون است.

ابزارهای مرتبط