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


در آموزش های قبل با بعضی از فانکشن های از پیش ساخته شده ی پایتون مانند ()print و ()help آشنا شدیم. در این آموزش نیز به بررسی تعداد دیگری از این دست فانکشن ها در زبان برنامه نویسی پایتون خواهیم پرداخت.

فانکشن (abs(x
قبل از معرفی فانکشن ()abs که در علوم ریاضی به تابع قدر مطلق معروف است، بهتر است کمی در مورد اعداد صحبت می کنیم. حتماً برای همه ی شما پیش آمده که اخبار هواشناسی را شنیده باشید. پیگیری اخبار هواشناسی بخصوص در فصل زمستان که هوا رو به سردی می رود بیش تر می شود. هواشناسان برای بیان وضعیت هوا معمولاً از درجه ی حرارت به عنوان معیار استفاده می کنند. احتمالاً تا به حال پیش بینی دماهایی مانند "منفی 10 درجه ی سانتی گراد" را شنیده اید، و البته ممکن است بسته به این که در کدام شهر سکونت داشته باشید، تجربه ی آغاز یک صبح زمستانی را در چنین دمایی داشته اید. اما منظور از کلمه ی "منفی" در این دما چیست و استفاده از این لغت چه مفهومی را می رساند. برای دانستن این موضوع باید ببینیم که معیار اندازه گیری دما به چه شکل تعیین می شود.

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

به همین صورت اعداد مثبت و منفی در بسیاری موضوعات دیگر نیز معنا پیدا می کنند. برای مثال حساب بانکی خود را در نظر بگیرید. تا وقتی که شما هیچ پولی در حساب خود ندارید اعتبار شما صفر است. اگر به حساب خود پول واریز کنید مقدار اعتبار حساب شما مثبت می شود و مبلغ اضافه شده با علامت مثبت در حساب شما ثبت می شود، اما وقتی از حساب خود پول برداشت می کنید از اعتبار شما کم می شود و مقدار برداشت شده با علامتی منفی در حساب شما ثبت می شود. در مورد وام های بانکی نیز همین طور است. زمانی که از بانک وام می گیرید و به بانک بدهکار می شوید، اعتبار شما منفی می شود. با پرداخت اقساط وام، کم کم اعتبار مثبت به حساب خود اضافه می کنید تا زمانی که این اعتبار مثبت اعتبار منفی شما را خنثی کند و تمام مبلغ وام تسویه شود تا میزان بدهی شما به صفر برسد (البته وام های بانکی در ایران مثال خوبی برای یادگیری مفهوم اعداد مثبت و منفی نیست چون در وام های بانکی مجموع اقساط پرداخت شده با میزان وام دریافت شده برابر نیست! به هر حال در این مثال فرض می کنیم که در یک کشور مسلمان به معنای واقعی کلمه زندگی می کنیم و منظور از وام، وام قرض الحسنه بوده است!)

حال مثالی از دنیای برنامه نویسی بزنیم. به طور مثال، در نظر بگیرید که می خواهیم برنامه ی یک بازی کامپیوتری را بنویسیم. در این بازی یک بازیکن وجود دارد که در ابتدای بازی در مرکز صفحه ی نمایش قرار دارد. با آغاز بازی این بازیکن می تواند شروع به حرکت کند و در صفحه جا به جا شود. برای این که وضعیت حرکت بازیکن را در صفحه مشخص کنیم می توانیم از یک جفت عدد مرتب به صورت (a, b) استفاده کنیم، که عدد a اندازه ی حرکت بازیکن در جهت چپ یا راست، و عدد b اندازه ی حرکت بازیکن در جهت بالا یا پایین را مشخص کند. حال برای آن که جهت حرکت بازیکن را هم مشخص کنیم می توانیم یک علامت برای a و b در نظر بگیریم به این صورت که اگر بازیکن به سمت راست حرکت کرد علامت a مثبت و اگر به سمت چپ حرکت کرد علامت a منفی باشد. به همین ترتیب در صورتی که بازیکن به سمت بالا حرکت کند علامت b مثبت و در صورتی که به سمت پایین حرکت کند علامت b منفی باشد.

نکته
تمام انواع اعداد مثل اعداد صحیح یا اعشاری می توانند به صورت اعداد مثبت و منفی نوشته شوند. در اعداد مختلط نیز هر یک از بخش های حقیقی یا انتزاعی می توانند علامت مثبت یا منفی داشته باشند.

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

در چنین مواردی برای پیدا کردن اندازه ی هر عدد که یک مقدار مثبت است از فانکشن قدر مطلق استفاده می کنیم، به این صورت که این فانکشن عددی را به عنوان آرگومان ورودی می گیرد، اگر علامت عدد مثبت باشد، اندازه ی آن برابر با خود عدد است، اما در صورتی که عدد وارد شده در فانکشن منفی باشد علامت آن تغییر کرده و به مثبت تبدیل می شود، در حالی که هیچ تغییری در اندازه ی آن ایجاد نمی شود (از آن جا که به صورت پیش فرض اعداد مثبت هستند قرار گرفتن علامت + در کنار اعداد مثبت الزامی نیست و غالباً علامت + اعداد نوشته نمی شود):

>>> abs(5.45)
5.45
>>> abs(-4)
4
>>> abs(0)
0
>>> abs(-0.876)
0.876
>>> abs(4-3j)
5.0

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

نکته
اندازه ی عدد مختلط a+bj بر اساس سینتکس زبان پایتون با (a**2+b**2)**(1/2) برابر است.

فانکشن ()float
کاربرد این فانکشن دقیقاً مانند فانکشن ()int است که در آموزش قبل با آن آشنا شدیم، یعنی از آن برای تبدیل استرینگ به عدد استفاده می شود با این تفاوت که نوع عدد به جای صحیح، اعشاری است. مثال هایی از کاربرد این فانکشن را در زیر می بینید:

>>> float("3.146536")
3.146536
>>> x = float("432") + 7
>>> x
439.0

لازم به ذکر است که خروجی فانکشن ()float بدون آرگومان، مقداری برابر با 0.0 است.

فانکشن (id(object
این فانکشن یک آبجکت یا «شیء» را به عنوان ورودی می گیرد و یک عدد که نشان دهنده ی identity یا «هویت منحصر به فرد» آن و مستقل از سایر اشیاء است را نشان می دهد:

>>> id("SokanAcademy.com")
37925952

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

فانکشن (len(object
این فانکشن یک آبجکت را به عنوان آرگومان ورودی می گیرد و طول آن را نشان می دهد. برای مثال اگر یک استرینگ را به عنوان آرگومان ورودی به این فانکشن بدهیم، تعداد کاراکترهای آن را نمایش می دهد. برای مثال تعداد ارقام یک عدد را می توان با استفاده از این فانکشن به دست آورد:

>>> len('345')
3

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

>>> len(324)
Traceback (most recent call last):
  File "<pyshell#44>", line 1, in 
    len(324)
TypeError: object of type 'int' has no len()

فانکشن (pow(x, y
این فانکشن دو عدد را به عنوان آرگومان ورودی می گیرد و عدد اول -x- را به توان عدد دوم -y- می رساند؛ یعنی دقیقاً کار عملگر ** را انجام می دهد:

>>> pow(2,3)
8

ممکن است این تابع سه آرگومان ورودی داشته باشد یعنی به صورت (pow(x, y, z باشد که در این صورت برای نمایش خروجی، مفسر پایتون ابتدا x را به توان y می رساند و سپس حاصل عملیات را بر z تقسیم کرده و در نهایت باقی مانده را برمی گرداند. یعنی عملیات آن همانند دستور x**y)%z) است، با این تفاوت که فانکشن ()pow حاصل عبارت را با دقت بیش تری به دست می آورد.

>>> pow(2,3,7)
1

در مثال بالا ابتدا عدد 2 به توان 3 رسیده است و سپس حاصل آن که عدد 8 است بر عدد 7 تقسیم شده و باقی مانده ی این عملیات تقسیم در خروجی نمایش داده شده است.

فانکشن (repr(object
این فانکشن یک آبجکت را به عنوان آرگومان می گیرد و آن را به صورت یک استرینگ بر می گرداند. برای مثال اگر عدد 3 را به عنوان ورودی به این تابع بدهیم، خروجی آن استرینگی است که کاراکتر 3 را نشان می دهد:

>>> repr(3)
'3'

البته نمی توان همه ی اشیاء را به راحتی به صورت استرینگ درآورد و این به ماهیت آن شیء بستگی دارد، به همین دلیل خروجی فانکشن repr برای بعضی از اشیاء به صورتی استرینگی است که غالباً نوع، نام و شناسه یا آی دی آن شیء را نشان می دهد. برای مثال می دانیم که هر فانکشن در پایتون یک آبجکت یا «شیء» است. بنابراین می توانیم تابعی مانند ()print را به عنوان آرگومان به فانکشن repr بدهیم و خروجی استرینگ آن را ببینیم:

>>> repr(print)
'<built-in function print>'

همان طور که می بینید تبدیل فانکشن پرینت با استفاده از تابع repr استرینگی است که مشخص می کند پرینت نمونه ای از توابع از پیش ساخته شده -built-in function- است و نام آن پرینت است.

فانکشن (round(number, ndigit
فانکشن ()round همان طور که از نام آن مشخص است برای رُند کردن اعداد مورد استفاده قرار می گیرد. این فانکشن دو آرگومان را به عنوان ورودی می گیرد: آرگومان اول یک عدد اعشاری است که می خواهیم با استفاده از این فانکشن آن را رند کنیم و آرگومان دوم یک عدد صحیح است که مشخص می کند اعشاری رُند شده پس از نقطه اعشار چند رقم داشته باشد، برای مثال اگر این عدد برابر با 2 باشد یعنی عدد اعشاری تنها باید تا دو رقم بعد از اعشار ادامه پیدا کند و مابقی ارقام آن حذف شوند. پس از حذف ارقام اعشاری، عدد اعشاری معمولاً به نزدیک ترین عدد گرد می شود. نمونه هایی از کاربرد این فانکشن را در زیر می بینید:

>>> round(2.745,2)
2.75
>>> round(0.45637,3)
0.456
>>> round(13.798765,0)
14.0

در مثال آخر آرگومان دوم برابر با صفر است که نشان می دهد تمام اعداد پس از نقطه اعشار باید حذف شوند. دو نکته در مورد این خروجی وجود دارد. اولاً با وجود حذف تمام ارقام اعشاری خروجی باز هم یک عدد اعشاری با یک رقم اعشار است. این یک قانون است که زمانی که تابع رند دو آرگومان می گیرد خروجی آن عددی از نوع آرگومان اول این تابع است. چون در این جا اولین آرگومان اعشاری بوده است خروجی نیز یک عدد اعشاری است (در واقع ما از فانکشن رند برای گرد کردن اعداد اعشاری استفاده می کنیم چون اعداد صحیح خودشان گرد شده هستند.) نکته ی دوم این است که عدد اعشاری داده شده به نزدیک ترین عدد به آن گرد شده است و چون عدد 14.0 نسبت به عدد 13.0 به آن نزدیک تر است در خروجی مقدار 14.0 را می بینیم. 

البته فانکشن رُند می تواند تنها یک عدد را هم به عنوان آرگومان بگیرد تا آن را گرد کند. در این صورت این بار با حذف بخش اعشاری، آن عدد اعشاری را به نزدیک ترین عدد صحیح گرد می کند. برای مثال کدهای زیر را در نظر بگیرید:

>>> round(234.9830083)
235
>>> round(-7.546)
-8

فانکشن (type(object
این فانکشن یک آبجکت را به عنوان آرگومان ورودی می گیرد و نوع آن را مشخص می کند، به عبارت دیگر این تابع مشخص می کند که آبجکت ورودی آن نمونه ای از کدام کلاس است:

>>> type(3.5)
<class 'float'>
>>> type(5)
<class 'int'>
>>> type('SokanAcademy.com')
<class 'str'>
>>> type(None)
<class 'NoneType'>

فانکشن (str(object
این فانکشن یک آبجکت را به عنوان آرگومان ورودی می گیرد و آن را به صورت یک استرینگ بر می گرداند. خروجی این فانکشن مانند ()repr است:

>>> str(-9.456)
'-9.456'
>>> str(print)
'<built-in function print>'

خروجی ()str مناسب برای چاپ است و جزییات یک شی را ارائه نمی‌ کند، برای مثال:

>>> repr("A")
'A'

در واقع این تابع شیء را طوری به استرینگ تبدیل می کند که برای انسان قابل خواندن باشد، این در حالی است که ()repr مثل حالت تعاملی یک ارائه ی کامل از شیء را به صورت استرینگ برمی‌گرداند:

>>> repr("A")
" 'A' "   # repr is giving an extra double quotes

در واقع فانکشن ()repr طوری شیء را تبدیل به استرینگ می کند که برای مفسر پایتون قابل خواندن باشد.

لیست نظرات
کاربر میهمان
دیدگاه شما چیست؟
کاربر میهمان
reza.babakhani
reza.babakhani
۱۳۹۷/۰۱/۰۸
در مثال دوم فانکشن (str(object باید ()repr به ()str تغییر پیدا کنه تا خروجی \"A\" درست بشه.
کاربر میهمان
کاربر میهمان
۱۳۹۵/۱۰/۲۴
خیلی عالیه مثل بقیه اموزش ها تا اینجا
محمدهادی
محمدهادی
۱۳۹۵/۰۸/۰۱
چرا گفتید فانکشن ()pow حاصل عبارت را با دقت بیش تری به دست می آورد؟!!
saeed_vp
saeed_vp
۱۳۹۵/۰۵/۱۴
با سلام خدمت استاد عزیز. و تشکر از تلاشتون.
من هم میخواستم یک مثال برای شما بزنم:
فکر کنید باهم به یک کارگاه بسیار بزرگ میریم. من شروع میکنم به توضیح دادن کاربرد ابزار برای شما.
میگم این پیچگوشتی 2 سو هست با اون پیچ دو سو باز میشه. این چهار سو و ... این ستاره ایه و پیچ ستاره ای باز میشه و اینها کلاسشون پیچگوشتیه.
بعدی کلاس آچار هست: این آچار فرانسه هست همه مهره ای رو باز میکنه و این رینگی هست و سایز بندی داره. این یکی ترکمتره به فشار حساس هست و ...
و همینطور ادامه میدم. به نظر شما با اینا میشه حتی یک کاربراتور ساده رو تعمیر کرد ؟
تازه اگه شانس آورده باشید خیلی حافظه خوبی داشته باشید. و گر نه تا توضیحای من تموم بشه شما تقریبا هیچی از قبلیها یاد نگرفتین.
ولی یه بچه هم با شاگردی کردن بعد از مدتی کنار اوستا ایستادن مکانیک میشه. چون کاربرد هر ابزاری رو در عمل میبینه.
البته این نظر من بود.
متشکرم
hacker
hacker
۱۳۹۵/۰۴/۰۳
خیلی فوق العاده و جامع توضیح میدین وخیلی ممنون بابت زحمت هاتون
sahmada
sahmada
۱۳۹۴/۱۱/۱۳
با سلام و تشکر از آموزش روان و ساده شما
اطفا تفاوت repr و str را بیان بفرمایید.
از نکته وام قرض الحسنه نیز استفاده بردیم :)
نرگس اسدی
نرگس اسدی
۱۳۹۴/۱۱/۱۳
سلام
پاسخ سوال شما به انتهای آموزش اضافه شد.

در پاسخ به

sahmada
sahmada
۱۳۹۴/۱۱/۱۷
با تشکر از پاسخ شما

در پاسخ به