فراخوانی توابع در پایتون
فراخوانی تابع در پایتون به معنای اجرای دستورات موجود در بدنهی یک تابع است. هنگامی که یک تابع را فراخوانی میکنید، برنامه اجرای خود را به آن تابع منتقل میکند و دستورات موجود در آن را به ترتیب اجرا میکند. پس از اتمام اجرای تابع، برنامه به نقطهای باز میگردد که تابع در آن فراخوانی شده است.
نحوهی فراخوانی تابع
فراخوانی تابع در پایتون به معنای اجرای دستورات موجود در بدنهی یک تابع است. این کار شبیه به درخواست انجام یک کار مشخص از یک تابع است. برای مثال، زمانی که شما میخواهید یک عدد را به توان دو برسانید، به جای نوشتن مجدد عملیات توانگیری، میتوانید از تابع داخلی pow()
استفاده کنید.
سینتکس فراخوانی تابع
برای فراخوانی یک تابع، کافی است نام تابع را به همراه پرانتز بنویسید. اگر تابع پارامترهایی داشته باشد، باید مقادیر مورد نظر را درون پرانتز و به ترتیب مشخص شده قرار دهید.
def سلام_بگو(نام):
print(f"سلام {نام}!")
# فراخوانی تابع
سلام_بگو("علی") # خروجی: سلام علی!
در مثال بالا:
سلام_بگو
نام تابع است.نام
پارامتر تابع است که یک رشته را دریافت میکند.- هنگام فراخوانی، رشته “علی” به عنوان آرگومان به پارامتر
نام
داده میشود.
انواع فراخوانی تابع
- فراخوانی با پارامترهای ضروری: پارامترهایی که هنگام تعریف تابع مشخص شدهاند و باید هنگام فراخوانی تابع به آنها مقدار داده شود.
- فراخوانی با پارامترهای پیشفرض: پارامترهایی که مقدار پیشفرض دارند و در صورت عدم ارائه مقدار، از مقدار پیشفرض استفاده میشود.
- فراخوانی با پارامترهای متغیر: با استفاده از
*args
و**kwargs
میتوان تعداد نامحدودی آرگومان را به تابع ارسال کرد.
نکات مهم
- ترتیب پارامترها: هنگام فراخوانی تابع، ترتیب آرگومانها باید با ترتیب پارامترها در تعریف تابع مطابقت داشته باشد.
- پارامترهای کیوردی: میتوانید با استفاده از نام پارامترها، مقادیر را به آنها اختصاص دهید و ترتیب آنها را تغییر دهید.
۱. تعریف اولیه یک تابع
برای اینکه بتوانید یک تابع را فراخوانی کنید، ابتدا باید آن را تعریف کنید. تعریف یک تابع با استفاده از کلمه کلیدی def
صورت میگیرد:
def function_name(parameters): """Optional docstring""" # Code block return result # Optional
۲. فراخوانی ساده توابع
پس از تعریف یک تابع، میتوانید آن را با استفاده از نام آن فراخوانی کنید:
def say_hello(): print("Hello, World!") # فراخوانی تابع say_hello() # خروجی: Hello, World!
۳. فراخوانی توابع با پارامترها
توابع میتوانند ورودیهایی به نام پارامتر بگیرند. شما میتوانید این پارامترها را در زمان فراخوانی تابع، به آنها مقداردهی کنید:
def greet(name): print(f"Hello, {name}!") greet("Ali") # خروجی: Hello, Ali!
۴. فراخوانی توابع با چندین پارامتر
اگر تابعی دارای چندین پارامتر باشد، میتوانید در زمان فراخوانی به ترتیب به آنها مقدار بدهید:
def add(a, b): return a + b result = add(5, 3) print(result) # خروجی: ۸
۵. فراخوانی توابع با پارامترهای پیشفرض
اگر پارامتری دارای مقدار پیشفرض باشد، میتوانید در زمان فراخوانی آن را نادیده بگیرید. در این حالت، مقدار پیشفرض استفاده میشود:
def greet(name="Guest"): print(f"Hello, {name}!") greet() # خروجی: Hello, Guest! greet("Sara") # خروجی: Hello, Sara!
۶. فراخوانی توابع با تعداد نامشخص پارامتر (*args)
با استفاده از *args
، میتوانید تعداد نامشخصی از پارامترها را به تابع ارسال کنید. این پارامترها به صورت یک Tuple درون تابع ذخیره میشوند:
def add_all(*args): return sum(args) result = add_all(1, 2, 3, 4) print(result) # خروجی: ۱۰
۷. فراخوانی توابع با پارامترهای کلید-مقدار (**kwargs)
با استفاده از **kwargs
، میتوانید تعداد نامشخصی از پارامترها را به صورت کلید-مقدار به تابع ارسال کنید. این پارامترها به صورت یک دیکشنری درون تابع ذخیره میشوند:
def print_info(**kwargs): for key, value in kwargs.items(): print(f"{key}: {value}") print_info(name="Ali", age=30, city="Tehran") # خروجی: # name: Ali # age: 30 # city: Tehran
۸. فراخوانی توابع به صورت بازگشتی
یک تابع میتواند خودش را فراخوانی کند. این نوع فراخوانی به نام بازگشت یا Recursion شناخته میشود:
def factorial(n): if n == 1: return 1 else: return n * factorial(n - 1) result = factorial(5) print(result) # خروجی: ۱۲۰
۹. فراخوانی توابع به صورت Lambda (ناشناس)
توابع لامبدا توابعی کوچک و ناشناس هستند که میتوانند در هر جایی از کد استفاده شوند. این توابع معمولاً برای عملیاتهای کوچک و سریع استفاده میشوند:
add = lambda x, y: x + y print(add(5, 3)) # خروجی: ۸
۱۰. نکات پیشرفته در فراخوانی توابع
ارسال لیست به تابع با *
: شما میتوانید یک لیست یا Tuple را به صورت عناصر جداگانه به تابع ارسال کنید.
def multiply(a, b, c): return a * b * c numbers = [2, 3, 4] print(multiply(*numbers)) # خروجی: ۲۴
ارسال دیکشنری به تابع با **
: مشابه لیستها، دیکشنریها نیز میتوانند به صورت کلید-مقدار به تابع ارسال شوند:
def display_info(name, age, city): print(f"{name} is {age} years old and lives in {city}.") person = {"name": "Sara", "age": 25, "city": "Tehran"} display_info(**person) # خروجی: Sara is 25 years old and lives in Tehran.
پارامترها و آرگومانها
پارامتر (Parameter)
- تعریف: پارامترها متغیرهایی هستند که در تعریف یک تابع مشخص میشوند و به عنوان ورودی به تابع عمل میکنند.
- هدف: پارامترها به تابع اجازه میدهند تا دادههای مختلفی را دریافت کرده و بر اساس آنها عملیات مورد نظر را انجام دهد.
- محل تعریف: پارامترها در داخل پرانتز پس از نام تابع تعریف میشوند.
آرگومان (Argument)
- تعریف: آرگومانها مقادیر واقعی هستند که هنگام فراخوانی تابع به پارامترها داده میشوند.
- هدف: آرگومانها به تابع میگویند که با چه دادههایی کار کند.
- محل استفاده: آرگومانها در داخل پرانتز هنگام فراخوانی تابع قرار میگیرند.
مثال:
def سلام_بگو(نام): # نام یک پارامتر است
print(f"سلام {نام}!")
سلام_بگو("علی") # "علی" یک آرگومان است
در این مثال:
نام
یک پارامتر است که در تعریف تابع مشخص شده است."علی"
یک آرگومان است که هنگام فراخوانی تابع به پارامترنام
داده شده است.
انواع پارامترها در توابع پایتون
در پایتون، توابع میتوانند انواع مختلفی از پارامترها را بپذیرند. هر نوع پارامتر، نحوهی ارسال آرگومانها به تابع و رفتار تابع را به گونهای متفاوت تعریف میکند. در ادامه به بررسی انواع اصلی پارامترها در پایتون میپردازیم:
۱. پارامترهای ضروری (Positional Arguments)
-
- تعریف: این پارامترها باید به ترتیب هنگام فراخوانی تابع مشخص شوند.
- مثال: Python
def جمع(a, b): return a + b نتیجه = جمع(۳, ۵) # a=3, b=5
۲. پارامترهای پیشفرض (Default Arguments)
-
- تعریف: برای این پارامترها، یک مقدار پیشفرض مشخص میشود. اگر هنگام فراخوانی تابع، مقداری برای این پارامترها داده نشود، از مقدار پیشفرض استفاده میشود.
- مثال: Python
def سلام_بگو(نام="مهمان"): print(f"سلام {نام}!") سلام_بگو() # خروجی: سلام مهمان! سلام_بگو("علی") # خروجی: سلام علی!
۳. پارامترهای متغیر موقعیتی (*args)
-
- تعریف: با استفاده از
*args
میتوان تعداد نامحدودی آرگومان موقعیتی را به تابع ارسال کرد. این آرگومانها به صورت یک تاپل در داخل تابع قابل دسترسی هستند. - مثال: Python
def جمع_همه(*اعداد): نتیجه = ۰ for عدد in اعداد: نتیجه += عدد return نتیجه نتیجه = جمع_همه(۱, ۲, ۳, ۴) # خروجی: ۱۰
- تعریف: با استفاده از
۴. پارامترهای متغیر کلیدی (**kwargs)
-
- تعریف: با استفاده از
**kwargs
میتوان تعداد نامحدودی آرگومان کلیدی را به تابع ارسال کرد. این آرگومانها به صورت یک دیکشنری در داخل تابع قابل دسترسی هستند. - مثال: Python
def چاپ_اطلاعات(**اطلاعات): for کلید, مقدار in اطلاعات.items(): print(f"{کلید}: {مقدار}") چاپ_اطلاعات(نام="علی", سن=۳۰, شهر="تهران")
- تعریف: با استفاده از
۵. پارامترهای کیوردی (Keyword Arguments)
-
- تعریف: پارامترهایی هستند که هنگام فراخوانی تابع با نامشان مشخص میشوند. ترتیب آنها اهمیتی ندارد.
- مثال: Python
def تقسیم(عدد_تقیسم_شونده, مخرج): return عدد_تقیسم_شونده // مخرج نتیجه = تقسیم(مخرج=۳, عدد_تقیسم_شونده=۱۷)
نکات مهم:
- پارامترهای ضروری باید قبل از پارامترهای پیشفرض قرار بگیرند.
- پارامترهای
*args
باید قبل از**kwargs
قرار بگیرند. - ترکیب این انواع پارامترها در تعریف توابع امکانپذیر است.
- ترتیب پارامترهای کیوردی هنگام فراخوانی تابع مهم نیست، اما ترتیب پارامترهای موقعیتی مهم است.
مثال ترکیب انواع پارامترها:
def تابع_نمونه(a, b=۲, *args, **kwargs):
print(a, b, args, kwargs)
تابع_نمونه(۱, c=۳, d=۴, x=۵, y=۶)
در این مثال:
a
یک پارامتر ضروری است.b
یک پارامتر پیشفرض با مقدار ۲ است.*args
یک پارامتر متغیر موقعیتی است که مقادیر(۳, ۴)
را دریافت میکند.**kwargs
یک پارامتر متغیر کلیدی است که دیکشنری{'c': 3, 'd': 4, 'x': 5, 'y': 6}
را دریافت میکند.
با درک این انواع پارامترها، میتوانید توابع منعطف و قدرتمندی در پایتون تعریف کنید.
مثالهای بیشتر
def جمع(a, b):
return a + b
نتیجه = جمع(۳, ۵) # a=3, b=5
def سلام_بگو(نام="مهمان"):
print(f"سلام {نام}!")
سلام_بگو() # خروجی: سلام مهمان!
سلام_بگو("علی") # خروجی: سلام علی!
در خلاصه:
- پارامترها در تعریف تابع مشخص میشوند و به عنوان جایگزین برای دادههای ورودی عمل میکنند.
- آرگومانها مقادیر واقعی هستند که هنگام فراخوانی تابع به پارامترها داده میشوند.
- درک تفاوت بین پارامتر و آرگومان برای نوشتن توابع کارآمد و خوانا بسیار مهم است.
مثالهای بیشتر
def جمع(a, b):
return a + b
نتیجه = جمع(۳, ۵)
print(نتیجه) # خروجی: ۸
def محاسبه_مساحت_دایره(شعاع):
pi = ۳.۱۴۱۵۹
مساحت = pi * شعاع * شعاع
return مساحت
مساحت_دایره = محاسبه_مساحت_دایره(۵)
print(مساحت_دایره)
کاربردهای فراخوانی توابع
- تکرارپذیری کد: با تعریف یک تابع، میتوانید یک قطعه کد را بارها و بارها با ورودیهای مختلف اجرا کنید.
- افزایش خوانایی کد: توابع به شما کمک میکنند تا کد خود را به بخشهای کوچکتر و قابل فهمتر تقسیم کنید.
- مدیریت پیچیدگی کد: با استفاده از توابع، میتوانید مشکلات پیچیده را به زیرمسئلههای کوچکتر تقسیم کنید و هر زیرمسئله را در یک تابع جداگانه حل کنید.
- استفاده مجدد از کد: توابع را میتوان در بخشهای مختلف برنامه استفاده کرد.
مثال عملی
def محاسبه_میانگین(*اعداد):
جمع_اعداد = sum(اعداد)
تعداد_اعداد = len(اعداد)
میانگین = جمع_اعداد / تعداد_اعداد
return میانگین
نتایج_امتحان = [۷۵, ۸۰, ۹۲, ۶۸]
میانگین_نمره = محاسبه_میانگین(*نتایج_امتحان)
print(میانگین_نمره)
در این مثال، تابع محاسبه_میانگین
با استفاده از *args
تعداد نامحدودی عدد را دریافت کرده و میانگین آنها را محاسبه میکند.
مثالهای بیشتر
def جمع(a, b):
return a + b
نتیجه = جمع(۳, ۵)
print(نتیجه) # خروجی: ۸
def محاسبه_مساحت_دایره(شعاع):
pi = ۳.۱۴۱۵۹
مساحت = pi * شعاع * شعاع
return مساحت
مساحت_دایره = محاسبه_مساحت_دایره(۵)
print(مساحت_دایره)
نکات مهم
- ترتیب پارامترها: هنگام فراخوانی تابع، ترتیب آرگومانها باید با ترتیب پارامترها در تعریف تابع مطابقت داشته باشد.
- پارامترهای پیشفرض: اگر پارامتری در تعریف تابع مقدار پیشفرض داشته باشد، میتوان هنگام فراخوانی تابع آن را مشخص نکرد.
- پارامترهای متغیر: با استفاده از
*args
و**kwargs
میتوان تعداد نامحدودی آرگومان را به تابع ارسال کرد.
کاربردهای فراخوانی توابع
- تکرارپذیری کد: با تعریف یک تابع، میتوانید یک قطعه کد را بارها و بارها با ورودیهای مختلف اجرا کنید.
- افزایش خوانایی کد: توابع به شما کمک میکنند تا کد خود را به بخشهای کوچکتر و قابل فهمتر تقسیم کنید.
- مدیریت پیچیدگی کد: با استفاده از توابع، میتوانید مشکلات پیچیده را به زیرمسئلههای کوچکتر تقسیم کنید و هر زیرمسئله را در یک تابع جداگانه حل کنید.
- استفاده مجدد از کد: توابع را میتوان در بخشهای مختلف برنامه استفاده کرد.
به طور خلاصه، فراخوانی توابع یکی از مفاهیم اساسی در برنامهنویسی پایتون است و به شما اجازه میدهد تا کدهای خود را به شکلی سازمانیافتهتر و کارآمدتر بنویسید.