آرگومانهای موقعیتی (Positional Arguments)
این سادهترین نوع آرگومان است. مقادیری که هنگام فراخوانی تابع پاس داده میشوند، به ترتیب به
پارامترهای تعریف شده در امضای تابع اختصاص مییابند.
PYTHON
def describe_pet(animal_type, pet_name):
"""Display information about a pet."""
print(f"\nI have a {animal_type}.")
print(f"My {animal_type}'s name is {pet_name.title()}.")
describe_pet('hamster', 'harry')
در اینجا، 'hamster' به animal_type و 'harry' به pet_name اختصاص داده
میشود. ترتیب در این نوع آرگومانها بسیار مهم است و جابجا کردن آنها منجر به نتایج اشتباه خواهد
شد.
آرگومانهای کلیدواژهای (Keyword Arguments)
یک آرگومان کلیدواژهای، یک زوج نام-مقدار است که شما مستقیماً هنگام فراخوانی تابع پاس میدهید.
وقتی از آرگومانهای کلیدواژهای استفاده میکنید، ترتیب آنها دیگر اهمیتی ندارد، زیرا پایتون
میداند که هر مقدار را به کدام پارامتر اختصاص دهد. این کار خوانایی فراخوانی تابع را به شدت
افزایش میدهد.
PYTHON
describe_pet(pet_name='willie', animal_type='dog')
این فراخوانی دقیقاً معادل فراخوانی قبلی است، اما بسیار خواناتر است و ترتیب آرگومانها دیگر مهم
نیست.
مقادیر پیشفرض برای پارامترها
شما میتوانید برای پارامترهای یک تابع، مقادیر پیشفرض تعریف کنید. اگر هنگام فراخوانی تابع،
مقداری برای آن پارامتر ارائه نشود، پایتون از مقدار پیشفرض استفاده خواهد کرد. این کار به شما
اجازه میدهد تا فراخوانی تابع را برای موارد رایج، سادهتر کنید.
یک قانون مهم: پارامترهایی که مقدار پیشفرض دارند، باید بعد از تمام پارامترهایی که مقدار پیشفرض
ندارند، تعریف شوند.
PYTHON
def describe_pet_default(pet_name, animal_type='dog'):
"""Display information about a pet."""
print(f"\nI have a {animal_type}.")
print(f"My {animal_type}'s name is {pet_name.title()}.")
describe_pet_default(pet_name='willie')
describe_pet_default(pet_name='harry', animal_type='hamster')
در اینجا اگر فقط نام حیوان خانگی را وارد کنید، مقدار پیشفرض 'dog' برای پارامتر
animal_type استفاده میشود. اما اگر مقدار دیگری برای animal_type مشخص
کنید، مقدار جدید جایگزین مقدار پیشفرض خواهد شد. این ویژگی باعث میشود توابع شما انعطافپذیرتر و
استفاده از آنها سادهتر شود.
لیست آرگومانهای متغیر
گاهی اوقات شما نمیدانید که یک تابع قرار است چه تعداد آرگومان دریافت کند. پایتون به شما اجازه
میدهد تا توابعی بنویسید که تعداد متغیری از آرگومانها را بپذیرند.
آرگومانهای موقعیتی متغیر (*args)
پارامتری که با یک ستاره (*) شروع میشود (طبق قرارداد *args)،
تمام آرگومانهای موقعیتی
اضافی را در قالب یک تاپل جمعآوری میکند.
PYTHON
def make_pizza(size, *toppings):
"""Summarize the pizza we are about to make."""
print(f"\nMaking a {size}-inch pizza with the following toppings:")
for topping in toppings:
print(f"- {topping}")
make_pizza(12, 'mushrooms', 'green peppers', 'extra cheese')
در اینجا تابع make_pizza میتواند هر تعداد تاپینگ را به عنوان
آرگومان دریافت کند. همه آرگومانهای اضافی به صورت یک تاپل در پارامتر toppings جمعآوری میشوند. این ویژگی زمانی مفید است که نمیدانید
کاربر چند آرگومان قرار است وارد کند یا میخواهید تابع شما انعطافپذیر باشد.
آرگومانهای کلیدواژهای متغیر (**kwargs)
پارامتری که با دو ستاره (**) شروع میشود (طبق قرارداد **kwargs)، تمام آرگومانهای
کلیدواژهای اضافی را در قالب یک دیکشنری جمعآوری میکند.
PYTHON
def build_profile(first, last, **user_info):
"""Build a dictionary containing everything we know about a user."""
user_info['first_name'] = first
user_info['last_name'] = last
return user_info
user_profile = build_profile('albert', 'einstein', location='princeton', field='physics')
print(user_profile)
در این کد، تابع build_profile دو پارامتر اجباری first و
last دارد و هر تعداد آرگومان کلیدواژهای اضافی را به صورت یک دیکشنری در
user_info جمعآوری میکند. این روش زمانی مفید است که بخواهید اطلاعات بیشتری را به
صورت پویا به تابع ارسال کنید، بدون اینکه از قبل پارامترهای آن را مشخص کرده باشید.
در این درس با روشهای مختلف و انعطافپذیر ارسال آرگومان به توابع در پایتون آشنا شدیم. دیدیم که
چگونه میتوان با استفاده از آرگومانهای موقعیتی، کلیدواژهای، مقادیر پیشفرض و لیستهای متغیر،
توابعی خوانا و قدرتمند طراحی کرد.