logo
همه

درباره تابع برنامه‌نویسی پایتون بیشتر بدانید!

Unes Moradi - 1403/12/3
banner image

تابع (Function) از مفاهیم بنیادی برنامه‌نویسی است که کدها را از عباراتی پراکنده به مجموعه‌ای منظم و سازمان‌یافته تبدیل می‌کند. با توابع می‌توانیم بخش‌های مختلف برنامه را ماژولار کرده و بارها از یک قطعه کد واحد استفاده کنیم. توابع در همه زبان‌ها از جمله پایتون باعث کاهش تکرار کدها شده و خوانایی و ساختار برنامه را بهبود می‌بخشند. 

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


ساختار کلی یک تابع در پایتون (syntax)

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

برای تعریف یک تابع در پایتون کلیدواژه def را به‌کار می‌بریم. این کلمه به مفسر پایتون اعلام می‌کند: «این‌جا قرار است یک تابع تعریف شود!» پس از def اسم تابع خود را انتخاب می‌کنیم که باید گویای عملکرد آن باشد. 

برای مثال این تابع دو عدد را دریافت کرده و مجموع آن‌ها را برمی‌گرداند:

defadd_numbers(a, b):

    return a + b

result = add_numbers(3,5)

print(result)  # خروجی: 8

در این مثال:

  • (def add_numbers (a,b تابعی به نام add_numbers را با دو ورودی a و b تعریف می‌کند.

  • return a + b مجموع دو عدد را برمی‌گرداند.

  • (print(result مقدار بازگشتی را نمایش می‌دهد.


مهم‌ترین تابع‌های پایتون

توابع پایتون به دو نوع کلی تقسیم می‌شود که هر کدام کاربرد خاص خود را دارند. در ادامه با جزئیات بیشتری به بررسی این توابع می‌پردازیم.


توابع از پیش تعریف‌شده (مثل print و len)

پایتون مجموعه‌ای از توابع آماده دارد که بدون نیاز به تعریف خاص، در دسترس هستند. پرکاربردترین توابع از پیش تعریف شده پایتون عبارت‌اند از:


تابع

توضیح

print()

نمایش داده‌ها در خروجی

len()

محاسبه طول لیست، رشته یا هر شی قابل شمارش دیگر

input()

دریافت ورودی از کاربر

int(), float(), str()

تبدیل نوع داده‌ها به یکدیگر

type()

مشخص کردن نوع داده‌ای متغیر

abs()

محاسبه مقدار قدر مطلق هر عدد

round()

گرد کردن عدد به نزدیک‌ترین مقدار

max()

پیدا کردن مقدار بیشینه در مجموعه‌ای از اعداد

min()

پیدا کردن مقدار کمینه در مجموعه‌ای از اعداد












توابع کاربر‌ساخته (user-defined)

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

مثال ۱: تابعی برای محاسبه مساحت دایره


defcircle_area(radius):

    pi = 3.141592

    return pi * (radius ** 2)

print(circle_area(5))  # خروجی: 78.5398

در این مثال:

  • تابع circle_area شعاع دایره را به عنوان مقدار radius دریافت کرده و مساحت دایره را محاسبه می‌کند.

  • مقدار pi ثابت و برابر ۳.۱۴ در نظر گرفته شده است.

  • مقدار نهایی بازگردانده شده و توسط تابع ()print نمایش داده می‌شود.

مثال ۲: تابعی برای محاسبه مساحت مستطیل

defcalculate_area(length, width):

 area = length * width

  return area

rectangle_area = calculate_area(5,10)

print(rectangle_area)# خروجی: 50


در این مثال:

  • calculate_area تابعی است که مساحت مستطیل را محاسبه می‌کند.

  • دو پارامتر length و width را به‌عنوان طول و عرض مستطیل دریافت می‌کند.

  • تابع پس از محاسبه مساحت، نتیجه را با کلمه کلیدی return برمی‌گرداند.


توابع ناشناس (Lambda): معرفی و مثال‌ها تابع زبان برنامه‌نویسی پایتون

گاهی نیاز داریم توابعی کوچک و یک‌خطی تعریف کنیم که تنها یک‌بار استفاده می‌شوند. در این موارد توابع ناشناس یا لامبدا به کمک ما می‌آیند. این توابع نامی ندارند و با استفاده از کلمه کلیدی lambda تعریف می‌شوند.

ساختار کلی تابع ناشناس بدین شکل است:

lambda arguments: expression

مثال ۱: تابع لامبدا square عدد ورودی را به توان دو می‌رساند:

square = lambda x: x ** 2

print(square(4))  # خروجی: 16

مثال ۲: تابع لامبدای زیر نام استان مربوط به هر شهر را برمی‌گرداند:

iran_city_to_province = lambda city: {

    'Tehran': 'Tehran',

    'Mashhad': 'Razavi Khorasan',

    'Shiraz': 'Fars',

    'Kermanshah': 'Kermanshah',

    'Isfahan': 'Isfahan',

    'Ahvaz': 'Khuzestan',

    'Kerman': 'Kerman',

    'Yazd': 'Yazd',

    'Rasht': 'Gilan',

    'Sanandaj': 'Kurdistan',

    'Bandar Abbas': 'Hormozgan'

}.get(city, 'City not found in Iran')

# مثال استفاده:

print(iran_city_to_province('Shiraz'))  # خروجی: Fars

print(iran_city_to_province('Paris'))    # خروجی: City not found in Iran

این تابع:

  • یک دیکشنری کوچک از شهرهای ایران و استان‌های مربوطه را شامل می‌شود.

  • اگر شهر در دیکشنری وجود داشته باشد، نام استان را برمی‌گرداند.

  • اگر شهر ناشناخته باشد، پیام خطا نمایش می‌دهد.


توابع بازگشتی (Recursive Functions): توضیح همراه با مثال

توابع بازگشتی مثل آینه‌هایی تودرتو خودشان را فراخوانی می‌کنند. این توابع برای حل مسائلی کاربرد دارند که می‌توان آن‌ها را به زیرمسائل کوچک‌تر و مشابه تقسیم کرد؛ مثلا محاسبه فاکتوریل یا دنباله فیبوناچی.


مثال ۱: تابع بازگشتی برای محاسبه فاکتوریل یک عدد

deffactorial(n):

    if n == 0:

        return1

    else:

        return n * factorial(n - 1)

print(factorial(5))  # خروجی: 120

در این مثال:

  • اگر n برابر 0 باشد، مقدار 1 بازگردانده می‌شود.

  • در غیر این صورت، n در مقدار فاکتوریل n-1 ضرب شده و تابع دوباره خودش را فراخوانی می‌کند.

مثال ۲: دنباله فیبوناچی با استفاده از تابع بازگشتی

def fibonacci(n):

    if n <= 1:

        return n

    else:

        return fibonacci(n - 1) + fibonacci(n - 2)

print(fibonacci(6))  # خروجی: 8

در این مثال:

  • اگر ورودی برابر یا کوچکتر از یک باشد، همان ورودی برگردانده می‌شود.

  • در غیر این صورت مقدار فیبوناچی ورودی محاسبه و نمایش داده می‌شود. 


نحوه فراخوانی توابع در پایتون

توابع تنها زمانی اجرا می‌شوند که آنها را فراخوانی کنید.بدین منظور کافی است نام تابع را نوشته و دو پرانتزش جلویش بگذارید:

function-name()

به همین راحتی!


مثال‌هایی برای استفاده از توابع

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


def greet_user(name):

  print(f"Welcome, {name}!")


greet_user("Ali")  # Output: Welcome, Alice!

greet_user("Amir")    # Output: Welcome, Bob!


ارسال آرگومان‌ها و استفاده از مقدار بازگشتی (Return Value)

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

در مثال زیر تابع multiply دو مقدار را به‌عنوان ورودی دریافت کرده و حاصل‌ضرب آن‌ها را بازمی‌گرداند. مقدار بازگشتی در متغیر product ذخیره و نمایش داده می‌شود.


def multiply(x, y):

    return x * y

product = multiply(4, 7)

print(product)  # خروجی: 28


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

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


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

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


در این مثال اگر مقدار آرگومان exponent مشخص نشود، پیش‌فرض ۲ برای آن در نظر گرفته می‌شود:

def power(base, exponent=2):

    return base ** exponent


print(power(3))   # خروجی: 9

print(power(3, 3)) # خروجی: 27


آرگومان‌های کلیدی (Keyword Arguments)

هنگام فراخوانی تابع می‌توانیم آرگومان‌ها را با نامشان مشخص کنیم. با این روش کدخواناتر شده و ترتیب آرگومان‌ها دیگر اهمیتی نخواهد داشت.

در این مثال ترتیب قرارگیری آرگومان‌ها در تابع اهمیتی ندارد، چون مقداردهی بر اساس نام آرگومان‌ها انجام می‌شود:


def introduce(name, age):

    print(f"نام: {name}, سن: {age}")


introduce(age=25, name="علی")  

# خروجی: نام: علی، سن: 25


آرگومان‌های دلخواه (*args و **kwargs)

گاهی اوقات نمی‌دانیم قرار است چند آرگومان به تابع ارسال کنیم. در این مواقع از *args و **kwargs استفاده می‌کنیم. *args برای دریافت تعداد نامشخصی آرگومان‌ معمولی و **kwargs برای دریافت تعداد نامشخصی آرگومان‌ کلیدی به‌کار می‌رود.

مثال ۱: تابع sum_numbers می‌تواند هر تعداد عدد را دریافت کرده و مجموع آن‌ها را محاسبه کند:

def sum_numbers(*args):

    return sum(args)


print(sum_numbers(1, 2, 3, 4, 5))  # خروجی: 15


مثال ۲: تابع show_info می‌تواند تعداد نامحدودی آرگومان کلیدی دریافت کرده و آن‌ها را نمایش دهد:

def show_info(**kwargs):

    for key, value in kwargs.items():

        print(f"{key}: {value}")


show_info(name="مریم", age=30, city="تهران")  

# خروجی:

# name: مریم

# age: 30

# city: تهران


کاربردهای توابع در پروژه‌های واقعی

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


مثال‌هایی از کاربرد توابع در پروژه‌های مختلف

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

  • پردازش داده‌ها: در پروژه‌هایی که با حجم زیادی از داده‌ها سروکار دارند، توابع برای تمیز کردن، تبدیل و تحلیل داده‌ها به کار می‌روند.

  • طراحی وب: در توسعه وب توابع برای مدیریت درخواست‌های کاربران، پردازش فرم‌ها و تولید صفحات وب پویا استفاده می‌شوند.

  • هوش مصنوعی: در این حوزه پیچیده توابع برای پیاده‌سازی الگوریتم‌های یادگیری ماشین و شبکه‌های عصبی به‌کار می‌روند.

چند کد بسیار پرکاربرد دنیای برنامه‌نویسی که از توابع استفاده می‌کنند:

۱. خواندن و پردازش داده‌ها از فایل:

def read_file(file_path):

    with open(file_path, 'r', encoding='utf-8') as file:

        return file.readlines()


lines = read_file("data.txt")

print(lines)


۲. ارسال درخواست به API:

import requests

def get_weather(city):

    url = f"https://api.weatherapi.com/v1/current.json?key=YOUR_API_KEY&q={city}"

    response = requests.get(url)

    return response.json()


weather_data = get_weather("Tehran")

print(weather_data)


۳. اعتبارسنجی ورودی کاربر:

def validate_email(email):

    return "@" in email and "." in email


print(validate_email("test@example.com"))  # خروجی: True


بهترین شیوه‌ها برای نوشتن توابع

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

  • نام‌گذاری معنادار: نام تابع باید به‌گونه‌ای باشد که عملکرد آن را به‌روشنی بیان کند.

  • کوتاه و مختصر: توابع باید وظیفه‌ی مشخصی را انجام دهند و از طولانی شدن بیش‌ازحد آن‌ها باید پرهیز کرد.

  • مستندسازی: نوشتن توضیحات برای توابع، به دیگر برنامه‌نویسان (و حتی خودتان در آینده) کمک می‌کند تا عملکرد تابع را به‌راحتی درک کنند.

  • تعداد آرگومان‌ها: تعداد آرگومان را تا جای ممکن محدود نگه دارید؛ چون آرگومان‌های زیاد دست شما را برای استفاده مجدد از آنها می‌بندد.


نتیجه‌گیری

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


سوالات متداول 

  1. تابع چیست؟ یک بلوک کد سازمان‌یافته است که برای انجام یک وظیفه خاص طراحی شده است. 

  2. چرا از تابع در پایتون استفاده کنیم؟ توابع به شما کمک می‌کنند تا کد خود را ماژولار (بخش‌بخش) کنید، از تکرار کدها جلوگیری کرده و خوانایی آن را افزایش دهید.

  3. تفاوت بین return و print در تابع چیست؟ return مقدار را به جایی که تابع فراخوانی شده بازمی‌گرداند. print فقط مقدار را در کنسول نمایش می‌دهد.

  4. پارامتر و آرگومان چه تفاوتی دارند؟ پارامتر متغیری است که در تعریف تابع لیست شده اما آرگومان مقداری است که هنگام فراخوانی تابع به آن ارسال می‌شود.

  5. چطور مقدار یک تابع را برگردانیم؟ با استفاده از کلمه کلیدی return می‌توانید یک یا چند مقدار را پس از انجام محاسبات از تابع به خروجی برگردانید.

  6. تابع لامبدا چیست؟ توابع کوچک، ناشناس و یک خطی هستند که برای مسائل ساده با کلمه کلیدی lambda تعریف می‌شوند.

مطالب مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *
نام*
ایمیل(اختیاری)

دیدگاه‌ها

دیدگاهی ثبت نشده، شما اولین نفر باشدی.
یاد بگیر، تجربه کسب کن،
تو بهترین شرکت‌ها استخدام شو.
K . E . L . A . A . S . O . R
| تمامی حقوق کپی‌رایت محفوظ است. ۱۴۰۲ شرکت کلاسور |