برنامه نویسی ۳۰۹۲ بازدید

در «زبان برنامه‌نویسی پایتون» (Python Programming Language)، می‌توان توابعی تعریف کرد که تعداد متغیری «آرگومان» (Arguments) دریافت می‌کنند. در این مطلب، روش تعریف چنین توابعی با استفاده از آرگومان‌های پیش‌فرض، کلیدواژه و دلخواه، آموزش داده شده است. به طور کلی، در مطلب پیش رو، موضوع آرگومان تابع در پایتون مورد بررسی قرار گرفته است.

آرگومان تابع در پایتون

در مطلب «تابع در پایتون — به زبان ساده»، مفهوم تابع، نحو آن، چگونگی تعریف و فراخوانی یک تابع، انواع توابع، مفهوم return، دامنه و طول عمر متغیرها و همچنین، مفهوم «داک‌استرینگ» (Docstring) همراه با مثال‌های متعدد، آموزش داده شد. در مطلب مذکور، بیان شد که یک تابع ابتدا باید تعریف و سپس، فراخوانی شود. در غیر این صورت، خطا اتفاق می‌افتد. در ادامه، مثالی برای این موضوع ارائه شده است.

مثال

def greet(name,msg):
   """This function greets to
   the person with the provided message"""
   print("Hello",name + ', ' + msg)

greet("Monica","Good morning!")

خروجی قطعه کد بالا، به صورت زیر است.

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'

آرگومان‌های متغیر تابع

توابعی که تاکنون در مثال‌های بالا معرفی شده‌اند، تعداد ثابتی آرگومان دریافت می‌کنند. در پایتون، راهکارهای دیگری برای تعریف تابع وجود دارد که با استفاده از آن، می‌توان توابعی تعریف کرد که تعداد آرگومان‌های متغیری را دریافت کنند. سه شکل از این نوع آرگومان‌های متغیر، در ادامه بیان شده‌اند.

آرگومان‌های پیش‌فرض پایتون

آرگومان‌های تابع در پایتون می‌توانند دارای مقدار پیش‌فرضی باشند. می‌توان یک مقدار پیش‌فرض را برای یک آرگومان، با استفاده از عملگر تخصیص (=) مشخص کرد. در ادامه، مثالی برای این مورد ارائه شده است.

مثال

def greet(name, msg = "Good morning!"):
   """
   This function greets to
   the person with the
   provided message.

   If message is not provided,
   it defaults to "Good
   morning!"
   """

   print("Hello",name + ', ' + msg)

greet("Kate")
greet("Bruce","How do you do?")

در این تابع، پارامتر name مقدار پیش‌فرض ندارد و باید (الزاما) در هنگام فراخوانی به آن داده شود. از سوی دیگر، پارامتر msg دارای مقدار پیش‌فرض Good morning است. بنابراین، در طول فراخوانی اختیاری محسوب می‌شود. اگر مقدار جدیدی برای آرگومان ارائه شود، مقدار پیش‌فرض را بازنویسی خواهد کرد.

در تابع، هر تعداد آرگومانی می‌تواند مقدار پیش‌فرض داشته باشد. اما هنگامی که یک آرگومان پیش‌فرض وجود داشته باشد، همه آرگومان‌های سمت راست آن نیز باید دارای مقدار پیش‌فرض باشند. این یعنی، آرگومان‌های غیر پیش‌فرض نمی‌توانند آرگومان‌های پیش‌فرض را دنبال کنند. برای مثال، اگر هدر تابع به صورتی که در زیر آماده است تعریف شود، پیغام خطا صادر خواهد شد.

مثال

def greet(msg = "Good morning!", name):

خروجی حاصل از اجرای کد بالا، یک پیغام خطا به صورت زیر، خواهد بود.

SyntaxError: non-default argument follows default argument

آرگومان‌های کلیدواژه پایتون

هنگامی که یک تابع با چندین مقدار فراخوانی می‌شود، این مقادیر مطابق با موقعیت آن‌ها به آرگومان‌ها تخصیص پیدا می‌کنند. برای مثال، در تابع بالا یعنی ()greet، هنگام فراخوانی تابع به صورت (?”greet(“Bruce”,”How do you do، مقدار «Bruce» به آرگومان name و «?How do you do» به آرگومان msg تخصیص پیدا می‌کند.

پایتون به توابع این امکان را می‌دهد تا با استفاده از آرگومان‌های کلیدواژه فراخوانی شوند. هنگامی که توابع بدین شکل فراخوانی می‌شوند، ترتیب آرگومان‌ها قابل تغییر است. فراخوانی‌هایی که برای تابع بالا، در قطعه کدهای زیر می‌آیند، همه معتبر هستند و خروجی یکسانی در پی خواهند داشت.

مثال

>>> # 2 keyword arguments
>>> greet(name = "Bruce",msg = "How do you do?")

>>> # 2 keyword arguments (out of order)
>>> greet(msg = "How do you do?",name = "Bruce") 

>>> # 1 positional, 1 keyword argument
>>> greet("Bruce",msg = "How do you do?")

همانطور که می‌توان مشاهده کرد، امکان ترکیب آرگومان‌های موقعیتی با آرگومان‌های کلیدواژه در طول فراخوانی یک تابع وجود دارد. اما، نباید فراموش کرد که آرگومان‌های کلیدواژه‌ها باید به دنبال آرگومان‌های موقعیتی بیایند. وجود یک آرگومان موقعیتی پس از آرگومان‌های کلیدواژه، منجر به خطا خواهد شد. برای مثال، فراخوانی تابع به صورتی که در زیر آمده، منجر به صدور پیغام خطا خواهد شد.

مثال

greet(name="Bruce","How do you do?")

خروجی قطعه کد بالا، خطایی به صورت زیر است.

SyntaxError: non-keyword arg after keyword arg

آرگومان‌های دلخواه در پایتون

گاهی، کاربر از پیش و به طور دقیق تعداد آرگومان‌هایی که به تابع پاس داده خواهد شد را نمی‌داند. پایتون، این امکان را در چنین شرایطی فراهم می‌کند که تابع با تعداد دلخواهی آرگومان فراخوانی شود. در تابع، از علامت «*» پیش از نام پارامتر برای اعلان این نوع از آرگومان‌ها استفاده خواهد شد. در ادامه، مثالی در همین رابطه ارائه شده است.

مثال

def greet(*names):
   """This function greets all
   the person in the names tuple."""

   # names is a tuple with arguments
   for name in names:
       print("Hello",name)

greet("Monica","Luke","Steve","John")

خروجی قطعه کد بالا به صورت زیر است.

Hello Monica
Hello Luke
Hello Steve
Hello John

در اینجا، تابع با چندین آرگومان فراخوانی شده است. این آرگومان‌ها پیش از پاس داده شدن به تابع در یک تاپل قرار می‌گیرند. درون تابع، از یک حلقه for برای بازیابی همه آرگومان‌ها استفاده خواهد شد.

اگر نوشته بالا برای شما مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

^^

بر اساس رای ۱۲ نفر
آیا این مطلب برای شما مفید بود؟
شما قبلا رای داده‌اید!
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.

«الهام حصارکی»، فارغ‌التحصیل مقطع کارشناسی ارشد مهندسی فناوری اطلاعات، گرایش سیستم‌های اطلاعات مدیریت است. او در زمینه هوش مصنوعی و داده‌کاوی، به ویژه تحلیل شبکه‌های اجتماعی، فعالیت می‌کند.