آرگومان‌های متغیر (args, kwargs)

اصلاح شده

2026-09-03


*args (Arguments)

  • برای دریافت تعداد متغیری آرگومان غیر کلیدی (positional arguments) به صورت تاپل استفاده می‌شه
  • اسم args قراردادی‌ست، ستاره (*) مهمه
def avr(*args):
    return sum(args) / len(args)


print(avr(1, 2, 3))
print(avr(10, 20, 30, 40))
2.0
25.0
  • می‌تونیم کنارش پارامترهای معمولی هم داشته باشیم:
def greet(prefix, *names):
    for name in names:
        print(f"{prefix} {name}")


greet("Hi", "Mohsen", "Nasim", "Reza")
Hi Mohsen
Hi Nasim
Hi Reza

**kwargs (Keyword Arguments)

  • برای دریافت تعداد متغیری آرگومان کلیدی (named arguments) به صورت دیکشنری استفاده می‌شه

  • دو ستاره (**) مهمه، اسم kwargs قراردادی‌ست

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

show_info(name="Mohsen", age=32, city="Sari")
name: Mohsen
age: 32
city: Sari
  • ترکیب با پارامترهای معمولی:
def introduce(greeting, **details):
    print(greeting)
    for key, value in details.items():
        print(f"{key} = {value}")


introduce("Welcome!", name="Mohsen", job="Teacher")
Welcome!
name = Mohsen
job = Teacher

استفاده همزمان از *args و **kwargs

پارامترهای معمولی → *args → پارامترهای کلیدی پیش‌فرض → **kwargs

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

example(1, 2, 3, 4, 5, c=20, name="Mohsen", age=32)
a=1, b=2
args=(3, 4, 5)
c=20
kwargs={'name': 'Mohsen', 'age': 32}

پاس دادن لیست یا دیکشنری به تابع

  • می‌تونیم یک لیست رو با * و یک دیکشنری رو با ** به تابع پاس بدیم:
def show(a, b, c):
    print(a, b, c)


numbers = [1, 2, 3]
show(*numbers)

data = {"a": 10, "b": 20, "c": 30}
show(**data)
1 2 3
10 20 30

جمع‌بندی

نکتهنکته

برای اکثر موارد، نام‌های args و kwargs قراردادی هستن، ولی ستاره و دو ستاره اجباری هستن. می‌تونید از نام‌های دیگه مثل *items و **options هم استفاده کنید.