با این تغییرات در آرگومانهای استاندارد، توابع خود را انعطافپذیرتر و استفاده آسانتر کنید.
سه نوع آرگومان وجود دارد که تابع پایتون می تواند بپذیرد: استاندارد، متغیر (*args) و کلمه کلیدی (**kwargs). آرگومان های استاندارد ساده ترین اما دارای عملکرد محدود هستند. از سوی دیگر، *args و **kwargs شما را قادر می سازد تا با پذیرش تعداد متغیر ورودی، عملکردهای خود را انعطاف پذیرتر کنید.
نوع انتقال آرگومان که انتخاب می کنید به ماهیت عملکرد شما و سبک برنامه نویسی ترجیحی شما بستگی دارد.
توابع پایه در پایتون
برای درک نحوه عملکرد دو آرگومان متغیر در توابع پایتون، درک دلیل وجود آنها در وهله اول ضروری است. یک تابع ساده تعداد ثابتی از آرگومان های ناشناس مانند این را اعلام می کند:
defaddnum(a, b, c):
return a + b + c
این عملکرد خوب کار می کند، اما جایی برای بهبود وجود دارد. بزرگترین مشکل این است که فقط دو آرگومان را کنترل می کند، بنابراین فقط می تواند دو عدد را جمع کند. اگر بخواهید دو یا چهار عدد اضافه کنید چه؟ این تابع به شما اجازه این کار را نمی دهد. ارسال آرگومان های بیشتر یا کمتر از آنچه تابع می پذیرد منجر به TypeError می شود.
البته، می توانید توابع بیشتری برای پذیرش تعداد آرگومان های مختلف ایجاد کنید. اما این ناخوشایند است و به هیچ وجه به خوبی مقیاس نخواهد شد. همچنین باید هر بار که میخواهید تعداد ورودی جدیدی را مدیریت کنید، یک تابع جدید ایجاد کنید.
اینجاست که آرگومان های متغیر و آرگومان های کلیدواژه وارد می شوند. با استفاده از *args و **kwargs، می توانید توابع انعطاف پذیری را تعریف کنید که می توانند تعداد متغیر ورودی را دریافت کنند.
*args در پایتون چیست؟
ایده اصلی *args در پایتون این است که به شما اجازه می دهد تعداد متغیری از ورودی ها را به تابع خود ارسال کنید. این در برنامه های مختلف مفید است. به عنوان مثال، یک برنامه ماشین حساب را در نظر بگیرید که در آن می خواهید به کاربر توانایی اضافه کردن دو یا چند عدد و برگرداندن مجموع را بدهید.
توجه داشته باشید که args فقط یک نام متغیر است. این * است که مهم است. شما می توانید از هر نام معتبری برای آرگومان متغیر خود استفاده کنید، به شرطی که * را وارد کنید.
نحوه استفاده از *args
می توانید تابع addnum را برای گرفتن تعداد متغیر ورودی به صورت زیر تغییر دهید:
defaddnum(*args):
total = 0
for num in args:
total = total + num
return total
قطعه کد بالا از یک حلقه for برای تکرار از طریق ورودی های ارائه شده استفاده می کند.
سپس می توانید تابع addnum را با آرگومان های متغیر فراخوانی کنید و بدون ایجاد خطا کار می کند:
print(addnum(10, 1, 12, 12, 4, 54, 5)) ## returns 98
print(addnum(14, 54, 5)) # returns 73
print(addnum(10, 5)) # returns 15
**kwargs در پایتون چیست؟
در حالی که هم *args و هم **kwargs به ما امکان می دهند تعداد متغیری از ورودی ها را به توابع ارسال کنیم، دومی مختص آرگومان های کلمه کلیدی است. اگر نمیدانید، آرگومانهای کلیدواژه فقط نامهای جذاب برای آرگومانهای دارای نام هستند.
نکته منحصر به فرد دیگر در مورد **kwargs این است که پایتون مقدار را به عنوان یک فرهنگ لغت نشان می دهد.
نحوه استفاده از **kwargs
مانند *args، دو ستاره بیت مهم است. می توانید از هر کلمه ای به عنوان نام پارامتر استفاده کنید. در اینجا مثالی از نحوه استفاده از **kwargs در پایتون آورده شده است:
defweekly_attendance(**weekdays):
total_attendees = 0
forattendeesinweekdays.values():
total_attendees = total_attendees + attendees
return total_attendees
print(weekly_attendance(monday = 265, tuesday = 698, wednesday = 365, thursday = 463, friday = 234)) # returns 2025
print(weekly_attendance(monday = 265, friday = 234)) # returns 499
print(weekly_attendance(wednesday = 365, thursday = 463, friday = 234)) # returns 1062
قطعه کد بالا نیز از یک حلقه for استفاده می کند، اما این بار با متد () ارزش داخلی پایتون. آن متد یک شی view از تمام مقادیر موجود در فرهنگ لغت را برمی گرداند. متد values() به شما این امکان را می دهد که بدون دردسر از طریق فرهنگ لغت پایتون حلقه بزنید.
از آرگومان های متغیر برای انعطاف پذیر کردن توابع پایتون خود استفاده کنید
آرگومان های تابع مفید هستند، اما برخی از توابع می توانند از پذیرش تعداد متغیری از آرگومان ها سود ببرند. آرگومان های کلمه کلیدی نامگذاری شده می توانند کد شما را خواناتر و استفاده آسان تر کنند. شما باید آرگومان های *args و **kwargs پایتون را بپذیرید. استفاده از آنها بسیار ساده است و با آنها می توانید عملکردها و برنامه های خود را انعطاف پذیرتر کنید.
با دنبال کردن مراحل و تکههای کد بالا، امیدواریم اکنون بتوانید از آرگومانهای متغیر کلمه کلیدی و غیرکلیدی برای توابع خود استفاده کنید.