آشنایی با مفهوم تابع در زبان برنامه نویسی پایتون


پیش از این گفتیم که انجام عملیات پردازشی روی داده های برنامه توسط عملگرها و توابع انجام می شود. در آموزش های گذشته با مفهوم عملگرها آشنا شدیم و اکنون در این بخش می خواهیم به معرفی مفهوم Function (فانکشن به معنی تابع) بپردازیم.

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

number1 = 8
number2 = 5
sum = number1 + number2
mean = sum / 2

در این برنامه، مجموع دو عدد که متغیرهای number1 و number2 به آن ها منتسب شده اند محاسبه می شود و حاصل این عملیات به متغیر sum به معنی «مجموع» منتسب می شود. آن گاه با تقسیم مجموع دو عدد بر تعداد آن ها میانگین دو عدد محاسبه و به متغیر mean به معنی «میانگین» اختصاص داده می شود. در نظر بگیرید اگر قرار باشد ما در برنامه ی خود میانگین صد جفت عدد متفاوت را محاسبه کنیم باید 100 بار قطعه کد نوشته شده را برای عددهای مختلف تکرار کنیم و 400 خط کد بنویسیم، یا فرض کنید اگر قرار بود برنامه ی ما مثلاً میانگین 1000 عدد را محاسبه کند یا میانگین های 1000 جفت عدد را محاسبه کند چند بار باید یک قطعه کد را تکرار می کردیم!

خوشبختانه امکاناتی در زبان های برنامه نویسی گنجانده شده است که به برنامه نویسان کمک می کند تا با حذف کارهای تکراری، با سرعت و دقت بیش تری کدنویسی کنند. یکی از این امکانات مفید آبجکت هایی به نام Function (فانکشن یا تابع) است. می توان گفت یک فانکشن برنامه ی کوچکی است که قابلیت استفاده ی مجدد را دارد. ایجاد و استفاده از یک فانکشن مثل این است که مجموعه ای از دستورات را در یک بلوک کد قرار دهیم و نامی برای آن انتخاب کنیم. اکنون در هر زمانی که لازم باشد دستورات داخل این بلوک را اجرا کنیم کافی است نام آن را فراخوانی کنیم. در حقیقت با این کار به مفسر آدرس آن بلوک کد را می دهیم تا با مراجعه به آن، دستورات داخل بلوک را اجرا کند.  

مزیت های استفاده از فانکشن ها:
- جلوگیری از تکرار کد
- تجزیه ی مسائل پیچیده به بخش های ساده تر
- واضح کردن کدها
- استفاده ی مجدد از کدها
- پنهان کردن کدها و ...

به طور کلی فانکشن ها را می توان به دو دسته ی کلی تقسیم بندی کرد: Built-in Function و User-Defined Function.

Built-in Function: تعداد محدودی از فانکشن ها هستند که توسعه دهندگان پایتون به صورت پیش فرض آن ها را برای مفسر پایتون تعریف کرده اند و برنامه نویسان می توانند هر زمان که به این فانکشن ها نیاز داشتند، از آن ها استفاده کنند. پیش از این ما در کدهای خود از فانکشنی تحت عنوان ()print به عنوان دستوری برای چاپ متن روی صفحه ی نمایش استفاده کرده ایم. پرینت یکی از انواع فانکشن های پیش فرض پایتون است.

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

abs() dict() help() min() setattr()
all() dir() hex() next() slice()
any() divmod() id() object() sorted()
ascii() enumerate() input() oct() staticmethod()
bin() eval() int() open() str()
bool() exec() isinstance() ord() sum()
bytearray() filter() issubclass() pow() super()
bytes() float() iter() print() tuple()
callable() format() len() property() type()
chr() frozenset() list() range() vars()
classmethod() getattr() locals() repr() zip()
compile() globals() map() reversed() __import__()
complex() hasattr() max() round()  
delattr() hash() memoryview() set()  

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

اگر فانکشن ها را مانند دستگاه هایی ببینیم که کاری را انجام می دهند، برخی از این دستگاه ها برای شروع کار نیاز به ورودی خاصی دارند که در اصطلاح برنامه نویسی به آن ها Argument یا «آرگومان» گفته می شود. برای مثال، یک آبمیوه گیری را در نظر بگیرید. این دستگاه برای شروع کار نیاز به یک ورودی آبدار مثل هویج دارد تا آب آن را بگیرد. البته شما بر اساس نیاز خود می توانید ورودی های دیگری هم به دستگاه بدهید، به طور مثال شاید شما دوست داشته باشید با دستگاه خود آب سیب بگیرید و دوست شما از آن برای گرفتن آب انبه استفاده کند.

نکته ای که باید به آن توجه کنید این است که با وجود این که دستگاه شما می تواند ورودی های زیادی بگیرد، به هر حال یک سری محدودیت هایی برای ورودی ها وجود دارد. به طور مثال شما نمی توانید در دستگاه خود گوشت بریزید، چرا که در این صورت دستگاه به درستی عمل نخواهد کرد و احتمالاً خراب می شود.

شبیه همین عملکرد در فانکشن ها نیز وجود دارد؛ یعنی با وجود آن که یک فانکشن می تواند آرگومان های متنوعی را به عنوان ورودی خود بگیرد، باز هم محدودیت هایی روی نوع آرگومان های ورودی آن وجود دارد و نمی توانیم هر نوع داده ای را به عنوان آرگومان در اختیار فانکشن قرار دهیم (به مرور، در آموزش های آتی با عملیاتی که هر یک از فانکشن های از پیش ساخته شده انجام می دهند آشنا خواهیم شد و از آن ها در برنامه های خود استفاده خواهیم کرد.) برای وارد کردن این ورودی ها یا آرگومان ها کافی است در زمان فراخوانی فانکشن آن ها را در میان همان پرانتزهای باز و بسته () قرار دهیم. برای مثال می توانیم استرینگ "SokanAcademy.com" را به عنوان آرگومان به فانکشن پرینت بدهیم که برای این کار فانکشن را به صورت ("print("SokanAcademy فراخوانی می کنیم.

User-Defined Function: فانکشن هایی هستند که بر اساس سینتکس های مشخص زبان پایتون توسط خود برنامه نویس ابتدا تعریف می شوند و سپس می توان از آن ها در زمان احتیاج استفاده کرد. این نوع فانکشن ها این اختیار را به برنامه نویسان می دهند که هر عملیاتی را روی داده ها اجرا و در برخی موارد خروجی هایی تولید کنند که در آموزش های آینده با نحوه ی تعریف این نوع فانکشن ها و همچنین نحوه ی  استفاده از آن ها نیز آشنا خواهیم شد.

لیست نظرات
کاربر میهمان
دیدگاه شما چیست؟
کاربر میهمان
دانیال
دانیال
بهترین آموزش ها برای شروع پایتون:)
کاربر میهمان
کاربر میهمان
سلام . لینکی که برای شروع کار با حالت اسکریپتی گذاشتید مشکل داره . لطفا تصحیح کنید . با تشکر
کاربر میهمان
کاربر میهمان
چگونه یک تابع بسازیم
a.r.j.f
a.r.j.f
خیلی ساده است به مثال زیر دقت کن
def name():
x+=2
return x

در پاسخ به

محمدهادی
محمدهادی
سلام. ممنون از آموزشتون. ی سوال
من نمیتونم درک کنم که وقتی مثلا مینویسیم a=8 یعنی اینکه ی شیئی از نوع integer با مقدار 8 ساختیم. اصلا نمیتونم اینو با مفهموم شی گرایی درک کنم. تو زبان C یا جاوا وقتی مینویسیم int a ، میگیم که ی متغیری تعریف کردیم از نوع integer . فرق داره با اون دیگه؟
نمیفهمم. اگه ی توضیحی بدید که ازین گنگی دربیام ممنون میشم
a.r.j.f
a.r.j.f
وقتی شما بهش میگین داخلش ۸ بزاره خودکار خودش میفهمه صحیح هست نیازی به تعریف نداره مگر در جایی متغیر شما اعشاری شده و میخوایید صحیح اش کنید که اونم داستانی جداست

در پاسخ به

saeed_vp
saeed_vp
نارنجی نوشتن هویجه خیلی باحال بود ;-) تا اینجا که خیلی خوب و مفهوم بوده. مرسی
سجاد
سجاد
حالت اسکریپتی همونی هس ک رنگ صفحه اش سیاه رنگ

aherehef
aherehef
ok
کاربر میهمان
کاربر میهمان
besyar khoob ast