9 تابع پیش فرض در پایتون که باید با آنها آشنا باشید - قسمت دوم

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

در قسمت قبلی این مطلب به 5 تا از این توابع پرداختیم، امروز به 4 تابع بعدی می پردازیم.


6 - تابع id

دستور id برای هر جسم یک int به عنوان هویت آن جسم باز می گرداند. این عدد برای هر جسم منحصر به فرد است و در تمام زمان وجود آن جسم ثابت خواهد بود.

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

در مثال زیر این مشکل که دستور = یک جسم جدید نمی سازد را بررسی می کنیم :

numbers = [1, 2, 3, 4, 5]
new_numbers = numbers

print('numbers id: {}, new_numbers id: {}'.format(id(numbers), id(new_numbers)))
numbers id: 1836112528136, new_numbers id: 1836112528136

می بینیم که id هر دو جسم یکسان است.

یک راه دیگر برای بررسی تشابه id دو جسم استفاده از دستورات is/is not است. با این کار می توانیم بفهمیم دو id به یک جسم اشاره می کنند یا خیر.

دستور is به ما True باز خواهد گرداند اگر هردو طرف id یکسانی داشته باشند.

دستور Is not به ما Trueباز خواهد گرداند اگر دو طرف id یکسانی نداشته باشند.

numbers is new_numbers
True


7 - تابع hex

تابع hex یک متغیر int را به یک رشته هگزادسیمال تبدیل خواهد کرد. این رشته با عبارت "0x" شروع خواهد شد که برای خواننده و برنامه نشان دهنده ی این است که با یک عدد هگزادسیمال رو به رو هستیم.

در مثال زیر، عدد 10 را به معادل هگزادسیمالش تبدیل می کنیم :

hex_number = hex(10)

print(hex_number)
0xa
print(type(hex_number))
<class 'str'>

اگر به این دستور ورودی به جز int داده شود، با ارور TypeError رو به رو خواهیم شد. در مثال زیر ورودی ما یک عدد float است :

hex_number = hex(10.0)
TypeError

برای حل مشکل TypeError می توانیم از try و except استفاده کنیم که در تابع بعدی مثال یاز این کار ذکر شده است.

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

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

پایتون رنگ ها را به صورت "#RRGGBB"درنظر دارد که در مکان های RRبرای رنگ قرمز، GG برای رنگ سبز و BB برای رنگ آبی از اعداد هگزادسیمال 00تا FF برای مشخص کردن شدت آن رنگ استفاده می شود.

رنگ ها را می توان به صورت یک tuple نیز نشان داد که در آن در 3 جایگاه به صورت (red,green,blue)، با استفاده از متغیر های intبین 0 تا 255 شدت هر رنگ را مشخص می کنیم.

حال اگر بخواهیم در یک تابع این tuple را به رشته هگزادسیمال تبدیل کنیم، می توانیم طبق مثال زیر با کمک دستور hexاین تبدیل را انجام دهیم :

def rgb_to_hex(rgb_triple):
hex_string = '' '
for integer in rgb_triple:
    hexadecimal = hex(integer)[2:] # string slicing to elimininate the prefix '0x'
        if len(hexadecimal) == 1:
            hexadecimal = '0' + hexadecimal # pad the string to the left with a 0
        hex_string += hexadecimal
return '#' + hex_string

حال اگر به این تابع TUPLE های رنگ ها را به عنوان ورودی بدهیم، به ما یک رشته HEX برای آن رنگ باز خواهد گرداند :

color_1 = (255, 255, 255)
color_2 = (255, 255, 0)
color_3 = (70, 90, 200)
color_1_hex = rgb_to_hex(color_1)
 '#ffffff'
color_2_hex = rgb_to_hex(color_2)
'#ffff00'
color_3_hex = rgb_to_hex(color_3)
'#465ac8'


8 - تابع bin

این دستور، هر عدد intرا به یک رشته ی باینری که با عبارت "0b" شروع خواهد شد، تبدیل می کند.

اگر به این دستور متغیری به جز intبه عنوان ورودی بدهیم، همانند hex، یک ارور TypeErrorبه ما خواهد داد.

برای هر دو حالت این ارور(هم در تابع hex و هم در تابع bin)، می توانیم با استفاده از try,except در حین عملیات تبدیل int به باینری یا هگزادسیمال از متوقف شدن اجرای برنامه جلوگیری کنیم. در قسمت try باید کدی که ممکن است به ما ارور دهد را قرار دهیم و در قسمت exceptکدی که به ارور ما رسیدگی می کند و جلوی متوقف شدن برنامه را خواهد گرفت.

در مثال زیر، سعی بر تبدیل یک intبه باینری داریم و در نظر داریم که اگر ورودی ما intنباشد نباید برنامه متوقف شود و به ارور بربخوریم (به عنوان یک قدم اضافه در هنگام بازگرداندن رشته باینری، "0b" را از اول رشته حذف می کنیم و فقط قسمت باینری را باز می گردانیم) :

def int2bin(integer):
    try:
        binary = bin(integer)
        return binary[2:] 

    except TypeError:
        print('An integer should be provided as input')


int2bin(5)
'101'

int2bin(6)
'110'

int2bin(4.0)
An integer should be provided as input

9 - تابع open

ما در پایتون از دستور open برای خواندن فایل ها و یا نوشتن در آنها استفاده می کنیم.

خواندن

برای خواندن فایل، ما ابتدا باید با دستور open در حالت خواندن (mode = 'r') فایل را باز کنیم. این دستور یک متغیر fileبه ما باز می گرداند که می توان آن را در یک متغیر ذخیره کرد. سپس از دستور read استفاده می کنیم تا محتویات این متغیر شامل فایلمان را بخوانیم و به صورت یک رشته درآوریم و با دستور پرینت آن را مشاهده کنیم .بعد از اتمام فعالیت خواندن باید با دستور close دسترسی به فایل را به اتمام برسانیم و آن را ببندیم. حتما باید هر فایلی که کارمان با آن به اتمام رسیده است را ببندیم تا در هنگام اجرای برنامه به مشکل بر نخوریم. کار های این پاراگراف را با کد زیر می توانیم انجام دهیم :

f = open('reading_file.txt', 'r')
content = f.read()
print(content)
f.close()

در مثال های زیر برخی از دستوراتی که در موارد مختلف در ادامه دستور open استفاده می شود را برای شما آورده ایم :

با استفاده دستور .readlines()می توانیم تمام خطوط فایل خوانده شده را به صورت یک لیست از رشته ها (که در آن هر عضو لیست یک خط از فایل ما خواهد بود) در بیاوریم. با استفاده از دستور print می توانیم این لیست را مشاهده کنیم :

f = open('reading_lines.txt', 'r')
content = f.readlines()
print(content)
['First line\n', 'Second line\n', 'Third line\n']
f.close()

با دستور .readline() هم می توانیم خطوط فایل را تک تک بخوانیم و به عنوان رشته خروجی بگیریم :

f = open('reading_lines.txt', 'r')
first_line = f.readline()
print(first_line)
# First line
second_line = f.readline()
print(second_line)
# Second line
third_line = f.readline()
print(third_line)
# Third line
f.close()

نکته : به یاد داشتن اینکه فایل باز شده را در انتهای نیازمان به آن ببندیم ممکن است برای ما سخت باشد. به همین علت، در پایتون می توانیم با استفاده از عبارت with(…) کدمان را بنویسیم. در این نوع از نوشتن دستورات، فایل ما به صورت خودکار در انتهای دستورات درون قسمت زیرمجموعه with بسته میشود و نیاز به نوشنت دستور بستن فایل نخواهیم داشت :

with open('reading_lines.txt', 'r') as f:
    content = f.readlines()
    print(content)
['First line\n', 'Second line\n', 'Third line\n']

نوشتن

برای نوشتن به یک فایل در پایتون، باید از حالت خواندن در تابع open استفاده کنیم (mode = 'w'). در این حالت، اگر فایل وجود نداشته باشد، پایتون به صورت خودکار این فایل را برای ما تشکیل می دهد. وقتی که فایل ما باز شد، با دستور write می توانیم درون آن متن موردنظرمان را بنویسیم. البته حتما در نظر داشته باشید که این دستور قبل از نوشتن محتوای جدید، محتوای قبلی فایل را پاک خواهد کرد.

در این حالت هم ما باید دسترسی به فایل را در هنگام اتمام فعالیت هایمان با دستور closeببندیم، مگر آنکه از دستور with استفاده کنیم:

f = open('new_file.txt', 'w')
f.write('This is a new file!')
f.close()


امیر هستم از ایران پایتونیرز، ممنونم از وقتی که برای خوندن قسمت دوم این پست گذاشتید.

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

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

منبع : www.towardsdatascience.com