توابع در پایتون
توابع در پایتون اگر هنگام برنامهنویسی مجبور شوید یک قطعه کد را بارها تکرار کنید، برنامه شما طولانی، شلوغ و
اگر هنگام برنامهنویسی مجبور شوید یک قطعه کد را بارها تکرار کنید، برنامه شما طولانی، شلوغ و نگهداری آن سخت خواهد شد. تابع (Function) راهحلی برای این مشکل است.
تابع مجموعهای از دستورات است که یک کار مشخص را انجام میدهد و هر زمان که بخواهید، فقط با نوشتن نام آن میتوانید همان عملیات را دوباره اجرا کنید. به بیان ساده، تابع مانند یک ماشین است؛ ورودی دریافت میکند، روی آن پردازش انجام میدهد و در صورت نیاز خروجی تولید میکند.
تابع یک بلوک از کد است که:
به جای اینکه ده بار یک قطعه کد را بنویسیم، یک بار آن را داخل تابع قرار میدهیم و هر زمان لازم باشد، تابع را فراخوانی میکنیم.
استفاده از توابع مزایای زیادی دارد:
به همین دلیل تقریباً تمام پروژههای حرفهای پایتون بر پایه توابع نوشته میشوند.
برای ساخت تابع از کلمه کلیدی def استفاده میشود. ساختار کلی:
def function_name():
دستورهامثال:
def hello():
print("Hello Python")این کد فقط تابع را تعریف میکند و هنوز اجرا نشده است.
برای اجرای تابع، کافی است نام آن همراه با پرانتز نوشته شود.
hello()خروجی:
Hello Pythonتا اینجا تابعی ساختیم که همیشه یک کار ثابت انجام میداد. اما معمولاً میخواهیم تابع روی دادههای مختلف کار کند. برای این منظور از پارامتر و آرگومان استفاده میکنیم. به زبان ساده:
به عبارت دیگر، پارامتر جای خالی برای دریافت اطلاعات است و آرگومان مقداری است که آن جای خالی را پر میکند.
در مثال زیر، تابع یک نام را دریافت کرده و پیام خوشآمدگویی چاپ میکند.
def welcome(name):
print("Welcome", name)
welcome("Ali")خروجی:
Welcome Aliدر این مثال: name یک پارامتر است. و "Ali" یک آرگومان است.
یک تابع را میتوان با مقادیر متفاوت فراخوانی کرد.
def welcome(name):
print("Welcome", name)
welcome("Ali")
welcome("Sara")
welcome("Reza")خروجی:
Welcome Ali
Welcome Sara
Welcome Rezaهمین موضوع یکی از مهمترین مزیتهای توابع است؛ یک بار تابع را مینویسیم اما بارها با دادههای مختلف از آن استفاده میکنیم.
یک تابع میتواند بیش از یک پارامتر داشته باشد.
def student(name, age):
print(name, "is", age, "years old")
student("Sara", 18)خروجی:
Sara is 18 years oldدر این مثال: name پارامتر اول و age پارامتر دوم است. "Sara" و 18 نیز آرگومانهایی هستند که هنگام فراخوانی ارسال شدهاند.
آرگومانها به ترتیب به پارامترها اختصاص داده میشوند.
def person(name, age):
print(name, age)
person("Ali", 20)
خروجی:
اما اگر جای آنها را عوض کنیم:
خروجی:
اگر تعداد آرگومانها کمتر یا بیشتر از تعداد پارامترها باشد، برنامه با خطا مواجه میشود. مثال زیر با خطا مواجه میشود:
def add(a, b):
print(a + b)
add(10)
خروجی:
مثال : تابعی بنویسیم که قیمت کالا و تعداد آن را دریافت کرده و مبلغ کل را محاسبه کند.
گاهی اوقات میخواهیم اگر هنگام فراخوانی تابع مقداری ارسال نشد، تابع از یک مقدار مشخص استفاده کند. در این حالت از پارامترهای دارای مقدار پیشفرض استفاده میکنیم. برای تعیین مقدار پیشفرض، هنگام تعریف تابع مقدار مورد نظر را بعد از علامت = قرار میدهیم. ساختار کلی آن به صورت زیر است:
def function_name(parameter=value):
دستوراتدر مثال زیر، اگر نامی برای تابع ارسال نشود، مقدار "Guest" به صورت خودکار استفاده میشود.
def welcome(name="Guest"):
print("Welcome", name)
welcome()
welcome("Sara")خروجی:
Welcome Guest
Welcome Saraدر فراخوانی اول هیچ آرگومانی ارسال نشده است، بنابراین مقدار پیشفرض (Guest) استفاده میشود. اما در فراخوانی دوم مقدار "Sara" جایگزین مقدار پیشفرض شده است.
مثال : فرض کنید هزینه ارسال کالا به طور پیشفرض 500 دلار است، اما در برخی سفارشها مقدار دیگری دارد.
میتوان چندین پارامتر را دارای مقدار پیشفرض قرار داد.
def student(name, age=18, city="Tehran"):
print(name, age, city)
student("Ali")
student("Sara", 20)
student("Reza", 22, "Shiraz")خروجی:
Ali 18 Tehran
Sara 20 Tehran
Reza 22 Shirazپارامترهای دارای مقدار پیشفرض باید بعد از پارامترهای معمولی قرار بگیرند. قطعه کد زیر به صورت صحیح نوشته شده است:
def func(name, age=18):
pass
اما این کد نادرست است و با خطای نحوی (SyntaxError) مواجه میشود.
def func(age=18, name):
pass
در مثالهای قبلی، آرگومانها را فقط بر اساس ترتیب ارسال میکردیم.
student("Sara", 20)اما در پایتون میتوان نام پارامتر را نیز هنگام فراخوانی نوشت. به این روش آرگومان نامدار یا Keyword Argument گفته میشود.
def student(name, age):
print(name, age)
student(age=20, name="Sara")خروجی:
Sara 20مشاهده میکنید که با وجود تغییر ترتیب، نتیجه صحیح است؛ زیرا پایتون مقادیر را بر اساس نام پارامترها تطبیق میدهد.
تا اینجا تمام توابع ما فقط چیزی را روی صفحه نمایش چاپ میکردند. اما در بسیاری از برنامهها هدف این نیست که نتیجه را فقط نمایش دهیم؛ بلکه میخواهیم آن را به بخش دیگری از برنامه برگردانیم تا بتوانیم دوباره از آن استفاده کنیم. برای این کار از دستور return استفاده میشود. به زبان ساده، return مقدار محاسبهشده را از داخل تابع به محل فراخوانی برمیگرداند.
ساختار کلی :
def function_name():
...
return valuedef add(a, b):
return a + b
result = add(10, 20)
print(result)خروجی:
30در این مثال: تابع مقدار 30 را برگردانده است. مقدار بازگشتی داخل متغیر result ذخیره شده است. سپس مقدار آن چاپ شده است.
مثال دوم : مقدار بازگشتی را میتوان مستقیماً استفاده کرد.
def square(number):
return number * number
print(square(8))خروجی:
64یکی از مهمترین مزایای return این است که خروجی تابع را میتوان در عملیات دیگر به کار برد.
def add(a, b):
return a + b
total = add(5, 8) * 2
print(total)خروجی:
26ابتدا تابع مقدار 13 را برگردانده و سپس در عدد ۲ ضرب شده است.
| ویژگی | print() |
return |
|---|---|---|
| هدف | فقط نتیجه را روی صفحه نمایش میدهد. | نتیجه را به محل فراخوانی تابع بازمیگرداند. |
| استفاده از نتیجه | مقدار قابل استفادهای تولید نمیکند. | میتوان مقدار را ذخیره یا در محاسبات بعدی استفاده کرد. |
| کاربرد | بیشتر برای نمایش خروجی و اشکالزدایی استفاده میشود. | برای نوشتن توابع کاربردی و حرفهای استفاده میشود. |
در پایتون میتوان با استفاده از تاپل، چند مقدار را همزمان بازگرداند.
def calculate(a, b):
return a + b, a * b
sum_result, product_result = calculate(4, 5)
print(sum_result)
print(product_result)خروجی:
9
20به محض اینکه دستور return اجرا شود، اجرای تابع متوقف میشود و دستورات بعد از آن اجرا نخواهند شد.
def test():
print("Start")
return
print("End")
test()خروجی:
Startعبارت "End" هرگز چاپ نمیشود، زیرا اجرای تابع پس از return خاتمه یافته است.
اگر در یک تابع از return استفاده نکنید، پایتون بهصورت خودکار مقدار None را برمیگرداند.
def hello():
print("Hello")
value = hello()
print(value)
خروجی:
Hello None
یکی از موضوعات مهم در کار با توابع، محدوده دسترسی (Scope) متغیرها است. اینکه یک متغیر در چه بخشی از برنامه قابل استفاده باشد، به محل تعریف آن بستگی دارد. در پایتون، متغیرها از نظر محدوده دسترسی به دو دسته تقسیم میشوند:
متغیری که داخل یک تابع تعریف شود، فقط در همان تابع قابل استفاده است. به این نوع متغیر، متغیر محلی گفته میشود.
پس از پایان اجرای تابع، دیگر به این متغیر دسترسی نخواهید داشت.
مثال :
def student():
name = "Sara"
print(name)
student()خروجی:
Saraدر این مثال، متغیر name فقط داخل تابع student() وجود دارد.
اگر بخواهیم همین متغیر را خارج از تابع استفاده کنیم، با خطا روبهرو میشویم.
def student():
name = "Sara"
student()
print(name)خروجی:
NameError: name 'name' is not definedزیرا متغیر name فقط داخل تابع تعریف شده است.
اگر متغیری خارج از همه توابع تعریف شود، در تمام قسمتهای برنامه قابل استفاده است. به این نوع متغیر، متغیر سراسری گفته میشود.
مثال :
name = "Sara"
def student():
print(name)
student()
print(name)خروجی:
Sara
Saraدر این مثال، متغیر name خارج از تابع تعریف شده است؛ بنابراین هم داخل تابع و هم خارج از آن قابل استفاده است.
اگر داخل تابع متغیری با همان نام متغیر سراسری ایجاد کنیم، متغیر محلی اولویت دارد و فقط داخل همان تابع استفاده میشود.
name = "Ali"
def student():
name = "Sara"
print(name)
student()
print(name)خروجی:
Sara
Aliدر این مثال: داخل تابع مقدار "Sara" چاپ میشود. خارج از تابع همچنان مقدار "Ali" باقی میماند.
بهطور پیشفرض، نمیتوان مقدار یک متغیر سراسری را داخل تابع تغییر داد. برای این کار باید از کلمه کلیدی global استفاده کرد.
count = 10
def increase():
global count
count += 1
increase()
print(count)خروجی:
11در این مثال، کلمه global به پایتون اعلام میکند که منظور از count همان متغیر سراسری است، نه یک متغیر جدید.
استفاده از global امکانپذیر است، اما در بیشتر پروژههای حرفهای توصیه نمیشود؛ زیرا تغییر متغیرهای سراسری از نقاط مختلف برنامه، پیدا کردن خطاها و نگهداری کد را دشوار میکند. در اغلب موارد، بهتر است دادهها را از طریق پارامترها به تابع ارسال کرده و با استفاده از return نتیجه را بازگردانید.
انتخاب نام مناسب برای توابع باعث میشود کد خواناتر و درک آن برای دیگران و حتی خودتان در آینده آسانتر باشد. بهتر است هنگام نامگذاری توابع، نکات زیر را رعایت کنید:
_) استفاده کنید.f() یا abc() پرهیز کنید.
در پایتون، همانطور که میتوان متغیرها را داخل یک تابع تعریف کرد، میتوان یک تابع را نیز داخل تابعی دیگر تعریف کرد. به این نوع توابع، توابع تو در تو (Nested Functions) گفته میشود. این روش معمولاً زمانی استفاده میشود که تابع داخلی فقط برای انجام بخشی از کار تابع اصلی مورد نیاز باشد و قرار نباشد از خارج آن فراخوانی شود.
مثال :
def outer():
def inner():
print("Hello Python")
inner()
outer()خروجی:
Hello Pythonدر این مثال:
inner() داخل تابع outer() تعریف شده است.inner() فقط از داخل outer() قابل فراخوانی است.اگر بخواهیم تابع داخلی را مستقیماً فراخوانی کنیم، با خطا مواجه میشویم.
def outer():
def inner():
print("Hello")
inner()
inner()خروجی:
NameError: name 'inner' is not definedدلیل این خطا این است که تابع inner() فقط در محدوده تابع outer() شناخته میشود.
تابع بازگشتی یا Recursive Function تابعی است که در هنگام اجرا، خودش را فراخوانی میکند. این روش برای حل برخی مسائل که به بخشهای کوچکتر تقسیم میشوند، کاربرد دارد. نکته مهم این است که هر تابع بازگشتی باید یک شرط پایان (Base Case) داشته باشد؛ در غیر این صورت، تابع بینهایت بار اجرا شده و برنامه با خطا مواجه میشود.
مثال :
کد زیر فاکتوریل یک عدد را با استفاده از تابع بازگشتی محاسبه میکند.
def factorial(n):
if n == 1:
return 1
return n * factorial(n - 1)
print(factorial(5))خروجی:
120در این مثال، تابع factorial() تا زمانی که مقدار n به ۱ برسد، خودش را دوباره فراخوانی میکند. سپس نتایج مرحلهبهمرحله محاسبه شده و مقدار نهایی بازگردانده میشود.
از توابع بازگشتی در مسائلی مانند موارد زیر استفاده میشود:
پایتون علاوه بر امکان ساخت توابع توسط برنامهنویس، مجموعهای از توابع داخلی (Built-in Functions) را نیز در اختیار شما قرار میدهد. این توابع از قبل در پایتون وجود دارند و بدون نیاز به نصب کتابخانه یا تعریف تابع، قابل استفاده هستند. در ادامه با چند مورد از پرکاربردترین توابع داخلی آشنا میشویم.
| تابع | کاربرد |
|---|---|
print() |
نمایش خروجی روی صفحه |
input() |
دریافت ورودی از کاربر |
len() |
محاسبه طول رشته یا تعداد عناصر یک مجموعه |
type() |
نمایش نوع داده یک متغیر |
int() |
تبدیل مقدار به عدد صحیح |
float() |
تبدیل مقدار به عدد اعشاری |
str() |
تبدیل مقدار به رشته |
sum() |
محاسبه مجموع عناصر |
max() |
پیدا کردن بزرگترین مقدار |
min() |
پیدا کردن کوچکترین مقدار |
range() |
تولید دنبالهای از اعداد برای حلقهها |
calculate_average() بنویسید که سه نمره را به عنوان ورودی دریافت کرده و معدل آنها را با استفاده از return برگرداند. سپس در برنامه اصلی، معدل را چاپ کنید.
check_password() بنویسید که یک رمز عبور را دریافت کند. اگر طول رمز حداقل ۸ کاراکتر باشد، مقدار True و در غیر این صورت False را با استفاده از return برگرداند.
final_price() بنویسید که قیمت یک کالا و تعداد آن را دریافت کرده و مبلغ کل را برگرداند. سپس مبلغ نهایی را در برنامه اصلی نمایش دهید.
convert_time() بنویسید که تعداد ثانیهها را دریافت کرده و تعداد دقیقه و ثانیه معادل آن را برگرداند. سپس نتیجه را به صورت مناسب نمایش دهید.
1252 دقیقه و 5 ثانیه
find_max() بنویسید که سه عدد را دریافت کرده و بزرگترین آنها را با استفاده از return برگرداند. در این تمرین از تابع آماده max() استفاده نکنید.
create_username() بنویسید که نام و نام خانوادگی کاربر را دریافت کرده و یک نام کاربری به صورت زیر برگرداند:
Ali Ahmadi → ali.ahmadi
در درس بعدی با توابع لامبدا (Lambda Functions) آشنا میشوید. یاد میگیرید چگونه توابع ساده و کوتاه را بدون استفاده از def و تنها در یک خط کد تعریف کنید. این قابلیت در بسیاری از برنامههای پایتون و هنگام کار با توابعی مانند map()، filter() و sorted() کاربرد فراوانی دارد.
گام بعدی : توابع لامبدا در پایتونتوابع در پایتون اگر هنگام برنامهنویسی مجبور شوید یک قطعه کد را بارها تکرار کنید، برنامه شما طولانی، شلوغ و
مجموعه (Set) در پایتون به زبان ساده، Set مجموعهای از عناصر منحصربهفرد (Unique) است که ترتیب مشخصی ندارد و اجازه
دیکشنری در پایتون تا اینجا با لیست (List) و تاپل (Tuple) آشنا شدیم که هر دو مجموعهای از دادهها را
تاپل (Tuple) در پایتون بعد از آشنایی با لیست (List)، نوبت به یکی دیگر از ساختارهای داده در پایتون یعنی
لیست (List) در پایتون پرکاربردترین ساختار داده تا اینجا یاد گرفتید که هر متغیر فقط یک مقدار را در خود
ساختارهای داده در پایتون در برنامههای واقعی معمولاً با یک داده سروکار نداریم، بلکه باید تعداد زیادی اطلاعات را ذخیره
حلقههای تکرار در پایتون (Python Loops) فرض کنید میخواهید جملهی “سلام” را ۱۰ بار چاپ کنید. یک راه این است که
عملگرهای مقایسهای (Comparison Operators) تا اینجا یاد گرفتیم که با عملگرهای محاسباتی میتوانیم اعداد را با هم جمع، تفریق و…
دریافت ورودی از کاربر در پایتون (Python Input) تا اینجا یاد گرفتیم که چگونه مقدار یک متغیر را خودمان داخل
عملگرهای محاسباتی در پایتون (Arithmetic Operators) تقریباً تمام برنامهها به انجام محاسبات نیاز دارند؛ از جمع و تفریق ساده گرفته
کار با رشتهها در پایتون (Python Strings) مدیریت و پردازش متنها در برنامهها در دنیای برنامهنویسی، اطلاعات همیشه عدد و
متغیرها در پایتون (Python Variables) اولین قدم برای ذخیره و پردازش اطلاعات تصور کنید یک برنامه مینویسید که قرار است
شروع برنامه نویسی با پایتون ساخت اولین پروژه (Hello World) فهرست مطالب بعد از نصب Python چه کاری انجام دهیم؟
آموزش نصب پایتون و ابزارهای موردنیاز (راهنمای کامل برای ویندوز) اگر تصمیم گرفتهاید برنامهنویسی را یاد بگیرید، احتمالاً نام زبان
الگوهای کندل استیک پیشرفته: راهنمای جامع برای معاملهگران حرفهای الگو های کندل استیک پیشرفته (یا به بیان دیگر الگوهای شمعی
آیلتس جنرال یا آکادمیک؟ کدام را باید انتخاب کنیم؟ آیا میدانید که انتخاب اشتباه بین آیلتس آکادمیک و جنرال میتواند
دانلود رایگان نمونه سوالات آزمون PTE جنرال اگر تصمیم گرفتهاید با هدف مهاجرت به یک کشور انگلیسی زبان، در آزمون
معرفی آزمون های زبان انگلیسی معتبر در ایران| کدام یک بهتر است؟ اگه قصد ادامه تحصیل یا مهاجرت داشته باشید،
بهترین روشهای آمادگی برای آزمون تافل چگونه برای آزمون تافل آماده شویم؟ آیا شما هم قصد دارید برای کسب نمره
چگونه در خارج از کشور برای آزمون آیلتس ثبت نام کنیم؟ اگر قصد مهاجرت تحصیلی یا کاری دارید، احتمالاً نام
آزمون GRE مناسب چه رشتههایی است؟ اگر قصد ادامه تحصیل در مقاطع کارشناسی ارشد یا دکترا در دانشگاههای بینالمللی را
بهترین نمونه سوالات اسپیکینگ تافل هوم ادیشن آزمون تافل هوم ادیشن این روزها یکی از پرطرفدارترین گزینهها برای سنجش مهارت
نحوه ثبت نام در آزمون دولینگو در ایران به صورت کامل نحوه ثبت نام در آزمون دولینگو در ایران چگونه
هزینه آزمون GRE در ایران چقدر است؟ اگر قصد مهاجرت تحصیلی دارید، احتمالاً نام آزمون GRE به گوشتان خورده است.
راهنمای کامل ثبتنام و پرداخت هزینه آزمون PTE در ترکیه برای متقاضیان ایرانی آزمون PTE (Pearson Test of English) یکی از
ووچر آزمون چیست و چگونه میتوان آن را تهیه کرد؟ ثبتنام در آزمونهای بینالمللی مانند TOEFL، GRE، PTE، GMAT، IELTS
بهترین تکنیک های لیسنینگ آیلتس برای کسب نمره بالا آزمون آیلتس (IELTS) یکی از معتبرترین آزمونهای ارزیابی مهارت زبان انگلیسی
آزمون پلاس مرجع آموزش برنامهنویسی، هوش مصنوعی، شبکه، نمونه سؤالات کنکورهای کامپیوتر، آزمونهای زبان دکتری و مدارک بینالمللی فناوری اطلاعات است. با ارائه آموزشهای تخصصی، منابع آموزشی و راهنمای آزمونها، به دانشجویان و متخصصان کمک میکنیم تا مهارتهای خود را توسعه داده و در مسیر موفقیت تحصیلی و شغلی گام بردارند.