آموزش زبان برنامه نویسی پایتون – قسمت پنجم
ﺯﻣﺎﻥ ﻣﻄﺎﻟﻌﻪ: 10 دقیقه

آموزش زبان برنامه نویسی پایتون – قسمت پنجم

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

اگه یادتون باشه توی جلسه سوم در مورد یه دستور به اسم type صحبت کردیم. این دستور وظیفه اش اینه که نوع داده ای مربوط به یک مقدار یا متغیر رو برای ما نمایش بده. در واقع type خودش یک نوع از تابع هستش که ورودی مخصوصی داره. 

ورودی و خروجی

دو مفهوم کلی درباره تابع وجود داره یکیش بهش می گن آرگومان یا «ورودی» و دومی بهش می گن خروجی. تعداد ورودی های مربوط به هر تابع می تونه متفاوت باشه مثلا بعضی از تابع ها یک ورودی، بعضی ها هیچ ورودی ندارند و بعضی دیگر n ورودی را دریافت می کنند ولی در نهایت هر تابع می تونه یه خروجی داشته باشه. یعنی شما یه سری ورودی دادید و براساس اون ورودی ها شما در نهایت یه خروجی دارید. مثلا برای تابع type شما داخل پرانتز یک ورودی رو قرار می دید، حالا فرق نداره عدد باشه، متغیر و یا … و  در نهایت تابع برای شما خروجی رو نشون میده. مثال:

type(10)

خروجی این دستور مقدار int خواهد بود که بیان می کند مقدار نوع داده ای عدد ۱۰، یک عدد صحیح است.

شما می تونید مقدار یک تابع رو داخل یک متغیر ذخیره کنید. برای مثال مقدار type(10) رو داخل متغیری به اسم a ذخیره کنید و اون رو با استفاده از دستور print چاپ کنید:

a = type(10)

print a

تبدیل نوع داده ای

با استفاده از بعضی تابع ها ما می توانیم که بعضی از مقادیر از نوع داده را به مقادیر دیگری تبدیل کنیم. مثلا یک مقدار بیان کننده عدد صحیحی است، با استفاده از یک تابع می توانیم آن را به رشته تبدیل کنیم.

a = int("23")

type(a)

b = str(a)

type (b)

همانطور که می بینید تابع int مقادیر رشته ای را به عدد صحیح تبدیل می کند اما، مقادیری که به فرم یک عدد نزدیک باشند در غیر اینصورت مفسر خطا چاپ می کند … مثلا:

int ("Hello")

کتابخانه

کتابخونه رو زمانی استفاده می کنیم که بخوایم تابع های بیشتری رو به محیط کاری پایتون اضافه کنیم. خب به صورت پیشفرض خود پایتون یکسری توابع رو برای ما فراهم کرده مثل همین int , type , str … پس ما به یکسری از تابع ها دسترسی داریم. ولی چیزی که پایتون رو واقعا به یه زبون قدرتمند تبدیل کرده کتابخونه های پایتون هستش. مثلا شما برای محاسبات ریاضی از کتابخونه ای به اسم math استفاده می کنید. 

اضافه کردن کتابخانه

برای اضافه کردن کتابخونه به محیط کاری خود از دستور import استفاده می کنیم. به این صورت:

import math

در این دستور من کتابخانه ای با نام math را فراخوانی کرده و آن را به محیط کاری پایتون اضافه می کند. برای استفاده از تابع ها ابتدا باید نام کتابخانه را نوشته سپس یک نقطه و در نهایت نام تابع مورد نظر. برای مثال با استفاده از دستور زیر می توانید سینوس دقیق ۳۰ درجه را بدست آورید:

math.sin(30)

احتمال دارد که شما قصد داشته باشید فقط یک تابع را از یک کتابخانه استفاده کنید. پس معقول نیست که تمام تابع های آن کتابخانه را فراخوانی کنید. هم موجب بالا رفتن حجم برنامه می شود و هم فضای اشباع شده زیادی را تولید می کنید. خوشبختانه برای این مشکل نیز راه حلی وجود دارد. با استفاده از دستور from و import می توانید این کار را انجام دهید. مثلا من تنها به دستور sin , cos در کتابخانه math احتیاج داریم کافیست بنویسم:

from math import cos, sin

همانطور که گفتم در این حالت تنها دو تابع sin , cos وارد محیط کاری می شود.

افزودن تابع جدید

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

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

main

child1

child2

main1

در این حالت main اول دارای فرزندی به اسم child1 است و در همین آن child2 هم فرزند child1 است. در این حالت برای آنکه مفسر را متوجه این روابط بکنیم باید از تورفتگی استفاده کنیم. اگر دقت کنید main1 را نیز خواهید دید. در این حالت main1 به صورت کامل از main جدا است.

خب برای نوشتن تابع ما از کلمه کلیدی def استفاده می کنیم. بعد از آن نام تابع، آرگومان های تابع و در نهایت دستورات مربوط به تابع را می نویسیم. مثال بسیار ساده از یک تابع بدون آرگومان که وظیفه اش تنها چاپ یک متن ساده است، به صورت زیر نوشته می شود:

def simple():

print ("Hello")

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

simple()

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

def fivelines():

print

print

print

print

print

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

def tenlines()

fivelines()

fivelines()

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

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

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

def simple(x):

       print(x**x)

از این به بعد هر بار که بخواهیم از این تابع استفاده کنیم کافی است که نام تابع را نوشته و داخل پرانتز بر اساس تعداد فضاها ورودی را وارد کنید. برای مثال در این تابع فقط یک فضا یا ورودی وجود دارد پس شما نمی توانید دو مقدار متفاوت را وارد کنید.

simple(10)

یک مثال دیگر. می خواهیم تابعی بنویسیم که دو ورودی را دریافت می کند و آن ها را با هم جمع می کند. و جمع آنها را با یک عدد اول منها و با عدد دوم ضرب می کند. پیچیده و خوشمزه !

def simple(a,b):

     c = a+b

     d = c-a

     e = c*b

     print(c,d,e)

برای استفاده از این تابع کافی است که اسم تابع و دو ورودی مورد نظر رو وارد کنید.

simple(1,2) 

متغیر های Global و محلی

اگر در تعریف تابع آخر دقت کرده باشید خواهید دید که سه متغیر c,d,e تعریف شده اند. قضیه ای وجود دارد. آیا اگر از این متغیر ها در بیرون از تابع هم استفاده کنید همان مقادیر را خواهید دید؟! مسلما خیر. در برنامه نویسی دو نوع متغیر یا مقدار ذخیره شده وجود دارد.

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

def simple(a,b):

   c = a+b

   d = c-a

   e = c*b

   print(c,d,e)

simple(1,2)

c = 100

d = 101

e = 102

print (c,d,e)

simple (1,2)

همانطور که می بینید دو بار متغیرهای c,d,e مقدار دهی شده اند ولی اگر تابع را فراخوانی نکنیم، مقدار های برگشتی ما همان مقادیر 100,101,102 خواهند بود.

چه امتیازی برای این مقاله میدهید؟

خیلی بد
بد
متوسط
خوب
عالی
در انتظار ثبت رای

/@arastoo
ارسطو عباسی
کارشناس تولید و بهینه‌سازی محتوا

کارشناس ارشد تولید و بهینه‌سازی محتوا و تکنیکال رایتینگ - https://arastoo.net

دیدگاه و پرسش

برای ارسال دیدگاه لازم است وارد شده یا ثبت‌نام کنید ورود یا ثبت‌نام

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

در حال دریافت نظرات از سرور، لطفا منتظر بمانید