تصور کنید که شما قصد ساخت یک تابع را دارید که در آن ورودیها خود را با همدیگر جمع میکند. سادهترین راه برای تعریف چنین تابعی به صورت زیر خواهد بود:
def mul(x, y): return x * y print(mul(10, 5))
اما در این حالت اگر من بیشتر از دو ورودی را وارد کنم چه اتفاقی خواهد افتاد؟ برنامه به من خطا داده و در نهایت کار نمیکند. بنابراین من نیاز دارم تابع را به صورتی ایجاد کنم که تعداد مقدارهای ورودی آن به صورت متغیر باشد. بدین معنا که هم بتواند دو ورودی را ضرب بکند، هم بتواند پنج ورودی را و… .
برای انجام چنین کاری میتوان از آرگومان *args استفاده کرد:
def mul(*args): return args print(mul(10,20,30,40))
اگر خروجی قطعه کد بالا را مشاهده کنید یک tuple را خواهید دید. حال برای آنکه عملگر ضرب را روی این موارد اعمال کنیم میتوانیم از یک حلقه for استفاده کنیم:
def mul(*args): res = 1 for num in args: res = res*num return res print(mul(10,20)) print(mul(10,20,30)) print(mul(10,20,30,40))
تفاوت میان kwargs با args در این است که خروجی را بجای آنکه به صورت tuple برگشت دهد به صورت یک ساختمان داده دیکشنری برگشت میدهد. بنابراین شما برای وارد کردن اطلاعاتتان نیز باید از قاعده key-value پیروی کنید. در غیر اینصورت خطا دریافت خواهید کرد. برای مثال به قطعه کد زیر دقت کنید:
def info(**kwargs): return kwargs print(info(‘Arastoo’, ‘Web Development))
خروجی قطعه کد بالا یک typeerorr خواهد بود. برای پر کردن تابع info شما نیاز دارید که به سبک زیر پیش بروید:
def info(**kwargs): return kwargs print(info(name = ‘Arastoo’, career= ‘Web Development))
حال میتوانید به صورت زیر دیکشنری ساخته شده را پیمایش کنید:
def info(**kwargs): for key, value in kwargs.items(): print(f’{key}: {value}’) info(name = ‘Arastoo’, career= ‘Web Developer’)