گاهی اوقات، وقتی به تعریف یک تابع در پایتون نگاه میکنید، ممکن است ببینید که دو آرگومان عجیب و غریب دارد: *args و **kwargs. اگر تا به حال فکر کرده اید که این متغیرهای عجیب و غریب چیست، یا چرا IDE شما آنها را در main() تعریف می کند، پس این مقاله برای شما مناسب است. شما یاد خواهید گرفت که چگونه از args و kwargs در پایتون برای افزایش انعطاف پذیری به توابع خود استفاده کنید.
در پایان مقاله، خواهید دانست:
معنی *args و **kwargs در واقع چیست
نحوه استفاده از *args و **kwargs در تعاریف تابع
نحوه استفاده از یک ستاره (*) برای باز کردن بسته بندی تکرارپذیرها
نحوه استفاده از دو ستاره (**) برای باز کردن دیکشنری ها
این مقاله فرض می کند که شما قبلاً می دانید که چگونه توابع پایتون را تعریف کنید و با لیست ها و فرهنگ لغت کار کنید.
ارسال چندین آرگومان به یک تابع
*args و **kwargs به شما امکان می دهند چندین آرگومان یا آرگومان کلمه کلیدی را به یک تابع ارسال کنید. مثال زیر را در نظر بگیرید. این یک تابع ساده است که دو آرگومان می گیرد و مجموع آنها را برمی گرداند
def my_sum(a, b): return a + b
این تابع به خوبی کار می کند، اما تنها به دو آرگومان محدود می شود. اگر بخواهید تعداد متغیری از آرگومان ها را جمع آوری کنید، که تعداد مشخصی از آرگومان های ارسال شده فقط در زمان اجرا تعیین می شود، چه؟ آیا ایجاد تابعی که بتواند تمام اعداد صحیح ارسال شده به آن را جمع کند، مهم نیست که چند عدد باشد، عالی نیست؟
چند راه وجود دارد که می توانید تعداد متفاوتی از آرگومان ها را به یک تابع منتقل کنید. راه اول اغلب برای افرادی که تجربه کار با مجموعه ها را دارند شهودی ترین راه است. شما به سادگی یک لیست یا مجموعه ای از همه آرگومان ها را به تابع خود ارسال می کنید. بنابراین برای my_sum()، می توانید لیستی از تمام اعداد صحیحی که باید اضافه کنید ارسال کنید:
# sum_integers_list.py def my_sum(my_integers): result = 0 for x in my_integers: result += x return result list_of_integers = [1, 2, 3] print(my_sum(list_of_integers))
این پیادهسازی کار میکند، اما هر زمان که این تابع را فراخوانی میکنید، باید فهرستی از آرگومانها را نیز برای ارسال به آن ایجاد کنید. این می تواند ناخوشایند باشد، به خصوص اگر از قبل همه مقادیری را که باید در لیست قرار گیرند، ندانید.
اینجاست که *args می تواند واقعاً مفید باشد، زیرا به شما امکان می دهد تعداد متفاوتی از آرگومان های موقعیتی را ارسال کنید. مثال زیر را در نظر بگیرید:
# sum_integers_args.py def my_sum(*args): result = 0 # Iterating over the Python args tuple for x in args: result += x return result print(my_sum(1, 2, 3))
برای توضیحات بیشتر و به ویدیو یوتیوب این آموزش مراجعه کنید و آموزشهای بیشتر در مورد پایتون را اونجا پیدا کنید