def avr(*args):
return sum(args) / len(args)
print(avr(1, 2, 3))
print(avr(10, 20, 30, 40))آرگومانهای متغیر (args, kwargs)
- دو ابزار قدرتمند در پایتون برای نوشتن توابعی با تعداد ورودی نامشخص
- باعث میشن تابع شما انعطافپذیرتر بشه و تعداد پارامترهای ورودی محدود نباشه
*args (Arguments)
- برای دریافت تعداد متغیری آرگومان غیر کلیدی (positional arguments) به صورت تاپل استفاده میشه
- اسم
argsقراردادیست، ستاره (*) مهمه
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 هم استفاده کنید.