آرگومان تابع در پایتون – به زبان ساده


در «زبان برنامهنویسی پایتون» (Python Programming Language)، میتوان توابعی تعریف کرد که تعداد متغیری «آرگومان» (Arguments) دریافت میکنند. در این مطلب، روش تعریف چنین توابعی با استفاده از آرگومانهای پیشفرض، کلیدواژه و دلخواه، آموزش داده شده است. به طور کلی، در مطلب پیش رو، موضوع آرگومان تابع در پایتون مورد بررسی قرار گرفته است.
آرگومان تابع در پایتون
در مطلب «تابع در پایتون — به زبان ساده»، مفهوم تابع، نحو آن، چگونگی تعریف و فراخوانی یک تابع، انواع توابع، مفهوم return، دامنه و طول عمر متغیرها و همچنین، مفهوم «داکاسترینگ» (Docstring) همراه با مثالهای متعدد، آموزش داده شد.
در مطلب مذکور، بیان شد که یک تابع ابتدا باید تعریف و سپس، فراخوانی شود. در غیر این صورت، خطا اتفاق میافتد. در ادامه، مثالی برای این موضوع ارائه شده است.
مثال
خروجی قطعه کد بالا، به صورت زیر است.
Hello Monica, Good morning!
در کد بالا، تابع ()greet دارای دو پارامتر است. به همین دلیل، این تابع با دو آرگومان فراخوانی شده است، به خوبی اجرا میشود و هیچ پیغام خطایی دریافت نمیکند. اگر این تابع با تعداد متفاوتی از آرگومانها فراخوانی شود، مفسر پیغام خطا صادر خواهد شد. در مثالهای زیر، این تابع با یک آرگومان و بدون هیچ آرگومانی فراخوانی شده است. همچنین، پیغامهای خطای صادر شده ناشی از اجرای برنامه برای هر یک از این حالات آورده شده است.
مثال اول همراه با خروجی آن
>>> greet("Monica") # only one argument TypeError: greet() missing 1 required positional argument: 'msg'
مثال دوم همراه با خروجی آن
>>> greet() # no arguments TypeError: greet() missing 2 required positional arguments: 'name' and 'msg'
آرگومانهای متغیر تابع
توابعی که تاکنون در مثالهای بالا معرفی شدهاند، تعداد ثابتی آرگومان دریافت میکنند. در پایتون، راهکارهای دیگری برای تعریف تابع وجود دارد که با استفاده از آن، میتوان توابعی تعریف کرد که تعداد آرگومانهای متغیری را دریافت کنند. سه شکل از این نوع آرگومانهای متغیر، در ادامه بیان شدهاند.
آرگومانهای پیشفرض پایتون
آرگومانهای تابع در پایتون میتوانند دارای مقدار پیشفرضی باشند. میتوان یک مقدار پیشفرض را برای یک آرگومان، با استفاده از عملگر تخصیص (=) مشخص کرد. در ادامه، مثالی برای این مورد ارائه شده است.
مثال
در این تابع، پارامتر name مقدار پیشفرض ندارد و باید (الزاما) در هنگام فراخوانی به آن داده شود. از سوی دیگر، پارامتر msg دارای مقدار پیشفرض Good morning است. بنابراین، در طول فراخوانی اختیاری محسوب میشود. اگر مقدار جدیدی برای آرگومان ارائه شود، مقدار پیشفرض را بازنویسی خواهد کرد.
در تابع، هر تعداد آرگومانی میتواند مقدار پیشفرض داشته باشد. اما هنگامی که یک آرگومان پیشفرض وجود داشته باشد، همه آرگومانهای سمت راست آن نیز باید دارای مقدار پیشفرض باشند. این یعنی، آرگومانهای غیر پیشفرض نمیتوانند آرگومانهای پیشفرض را دنبال کنند. برای مثال، اگر هدر تابع به صورتی که در زیر آماده است تعریف شود، پیغام خطا صادر خواهد شد.
مثال
خروجی حاصل از اجرای کد بالا، یک پیغام خطا به صورت زیر، خواهد بود.
SyntaxError: non-default argument follows default argument
آرگومانهای کلیدواژه پایتون
هنگامی که یک تابع با چندین مقدار فراخوانی میشود، این مقادیر مطابق با موقعیت آنها به آرگومانها تخصیص پیدا میکنند. برای مثال، در تابع بالا یعنی ()greet، هنگام فراخوانی تابع به صورت (?"greet("Bruce","How do you do، مقدار «Bruce» به آرگومان name و «?How do you do» به آرگومان msg تخصیص پیدا میکند.
پایتون به توابع این امکان را میدهد تا با استفاده از آرگومانهای کلیدواژه فراخوانی شوند. هنگامی که توابع بدین شکل فراخوانی میشوند، ترتیب آرگومانها قابل تغییر است. فراخوانیهایی که برای تابع بالا، در قطعه کدهای زیر میآیند، همه معتبر هستند و خروجی یکسانی در پی خواهند داشت.
مثال
همانطور که میتوان مشاهده کرد، امکان ترکیب آرگومانهای موقعیتی با آرگومانهای کلیدواژه در طول فراخوانی یک تابع وجود دارد. اما، نباید فراموش کرد که آرگومانهای کلیدواژهها باید به دنبال آرگومانهای موقعیتی بیایند. وجود یک آرگومان موقعیتی پس از آرگومانهای کلیدواژه، منجر به خطا خواهد شد. برای مثال، فراخوانی تابع به صورتی که در زیر آمده، منجر به صدور پیغام خطا خواهد شد.
مثال
greet(name="Bruce","How do you do?")
خروجی قطعه کد بالا، خطایی به صورت زیر است.
SyntaxError: non-keyword arg after keyword arg
آرگومانهای دلخواه در پایتون
گاهی، کاربر از پیش و به طور دقیق تعداد آرگومانهایی که به تابع پاس داده خواهد شد را نمیداند. پایتون، این امکان را در چنین شرایطی فراهم میکند که تابع با تعداد دلخواهی آرگومان فراخوانی شود.
در تابع، از علامت «*» پیش از نام پارامتر برای اعلان این نوع از آرگومانها استفاده خواهد شد. در ادامه، مثالی در همین رابطه ارائه شده است.
مثال
خروجی قطعه کد بالا به صورت زیر است.
Hello Monica Hello Luke Hello Steve Hello John
در اینجا، تابع با چندین آرگومان فراخوانی شده است. این آرگومانها پیش از پاس داده شدن به تابع در یک تاپل قرار میگیرند. درون تابع، از یک حلقه for برای بازیابی همه آرگومانها استفاده خواهد شد.
اگر نوشته بالا برای شما مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای برنامهنویسی پایتون
- آموزش تکمیلی برنامهنویسی پایتون
- مجموعه آموزشهای دادهکاوی و یادگیری ماشین
- زبان برنامهنویسی پایتون (Python) — از صفر تا صد
- یادگیری علم داده (Data Science) با پایتون — از صفر تا صد
- آموزش پایتون (Python) — مجموعه مقالات جامع وبلاگ فرادرس
^^
بسیار عالی توضیح دادید روان وساده جامع ومانع
مثل همیشه ساده و روان , مفید و کاربردی