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

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

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

1 - isinstance

دستور isinstance(object,class) به ما یک جواب True و یا Flase برای سوال اینکه آیا متغیر object از نوع class است فراهم می کند. ما می توانیم به جای اینکه در ورودی class یک نوع متغیر را به تابع بدهیم، یک tuple از انواع متغیرها به آن بدهیم. در این حالت در صورتی جواب Trueمی گیریم که نوع متغیر object یکی از اعضای این tuple باشد.

برای مثال برای لیست زیر :

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

جواب های isinstance به صورت زیر خواهد بود :

isinstance(numbers,list) 
True
isinstance(numbers,float) 
Flase
isinstance(numbers,(float,list)) 
 True

2 - zip

تابع zip(inp1,inp2) به ما اشاره گر یک سری tuple بازخواهد گرداند که در آنها tuple شماره i، عضو iام inp1 و inp2 را خواهد داشت.تعداد این tuple ها وابسته به تعداد اعضای ورودی هایی است که به این دستور داده شده است.

در مثال زیر، دو لیست به عنوان ورودی به این دستور داده شده است. نتیجه یک تعداد tuple (برابر با طول لیست ها) است که هرکدام از این tupleها دو عضو دارد.

products = ['table', 'chair', 'sofa', 'bed', 'lamp']
prices = [50, 20, 200, 150, 10]
zip(products, prices) 

خروجی این کد به صورت زیر خواهد بود :

<zip at 0x1ab80c8b788>

تابع zip می تواند هر نوع ورودی را دریافت کند (لیست، رشته ها، tupleها و یا دیکشنری ها) ولی دیدیم که اگر تنها از این دستور استفاده کنیم، در خورجی یک اشاره گر دریافت خواهیم کرد که به tuple ها اشاره می کند. برای نشان دادن اعضای این tuple ها باید از دستور list() استفاده کنیم تا این tupleها را به عنوان یک لیست در خروجی داشته باشیم و بتوانیم از آن استفاده کنیم.

list(zip(products, prices)) 
 [('table', 50), ('chair', 20), ('sofa', 200), ('bed', 150), ('lamp', 10)]

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

products = ['table', 'chair', 'sofa', 'bed', 'lamp']
prices = [50, 20, 200, 150, 10]
for product, price in zip(products, prices):
    print('Product: {}, Price: {}'.format(product, price))

خروجی کد به صورت زیر خواهد بود :

Product: table, Price: 50
Product: chair, Price: 20
Product: sofa, Price: 200
Product: bed, Price: 150
Product: lamp, Price: 10

از ترکیب این تابع با تابع dict() هم می توانیم از دو لیست یک دیکشنری بسازیم:

products = ['table', 'chair', 'sofa', 'bed', 'lamp']
prices = [50, 20, 200, 150, 10]
dict(zip(products, prices))

در این حالت خروجی ما یک دیکشنری به صورت زیر خواهد بود :

{'table': 50, 'chair': 20, 'sofa': 200, 'bed': 150, 'lamp': 10}

از این تابع می توانیم برای باز کردن یک توالی و تبدیل آن به چند توالی دیگر (unzip کردن) هم استفاده کرد، برای این کار باید از * در ورودی تابع استفاده کنیم. در مثال زیر ما از این دستور برای باز کردن یک لیست تشکیل شده از tuple به دو tuple جداگانه استفاده می کنیم:

products_and_prices = [('table', 50), ('chair', 20), ('sofa', 200), ('bed', 150), ('lamp', 10)]
products, prices = zip(*products_and_prices)

الان در products عضو اول tupleها و در prices عضو دوم tuple ها ذخیره شده است :

print(products)
('table', 'chair', 'sofa', 'bed', 'lamp')
print(prices)
(50, 20, 200, 150, 10)

3 - map

دستور map، برای اعمال یک تابع مشخص به تمامی اعضای یک جسم است. خروجی این تابع خود یک اشاره گر map object است که می توان آن را به راحتی با همراه کردن آن با توابع پیش فرض پایتون به نمایش درآورد (مثل دستور zip که به تنهایی خروجیش قابل نشان دادن به کاربر نبود).

اولین ورودی تابع map یک تابع دیگر خواهد بود. در این ورودی نه تنها می توانیم از توابع پیش فرض موجود در پایتون استفاده کنیم، بلکه حتی می توانیم از توابع ساخته شده توسط خود برنامه نویس (با def) و یا از یک تابع anonymous (با lambda) استفاده کنیم.ورودی دوم، جسم مورد نظر ما است که می خواهیم بر روی تمامی اعضای آن تابع در ورودی اول را تاثیر دهیم . این ورودی می تواند یک لیست، ست، tupleو یا دیکشنری باشد.

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

numbers = [1, 2, 3, 4, 5]
list(map(lambda x: x + 1, numbers))
# [2, 3, 4, 5, 6]
list(map(lambda x: x * 2, numbers))
[2, 4, 6, 8, 10]
list(map(lambda x: x ** 3, numbers))
 [1, 8, 27, 64, 125]

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

numbers = [1, 2, 3, 4, 5]
def add_one(element):
    return element + 1

list(map(add_one, numbers))
[2, 3, 4, 5, 6]

4 – filter

تابع filter هم مانند تابع map یک تابع و یک جسم از ما به عنوان ورودی می گیرد. تفاوت آن این است که در این مورد خروجی filter اعضایی از آن جسم خواهد بود که با وارد کردن آنها در تابع ورودی، مقدار Trueبازگردانده شود. همانند تابع map، می توانیم هر 3 نوع توابع (نوشته شده توسط کاربر، توابع anonymous و توابع پیش فرض موجود در پایتون) را به عنوان ورودی به filter بدهیم.

خروجی این تابع هم مانند map و zip یک اشاره گر خواهد بود که می توان آن را با دستور list() نمایش داد.

برای مثال در کد زیر، ما اعداد فرد را به عنوان خروجی خواهیم داشت :

numbers = [1, 2, 3, 4, 5, 6]
list(filter(lambda x: x % 2, numbers))
[1, 3, 5]

در ورودی دوم تابع اجسامی مانند لیست ها، رشته ها، tupleها و یا دیکشنری ها را می توان استفاده کرد. در مثال قبلی از یک لیست استفاده کردیم و در این مثال از لیستی از رشته ها استفاده می کنیم و اعضای آن را که با Vو یا M شروع شده است به عنوان خروجی می دهیم :

cities = ('Madrid', 'Valencia', 'Barcelona', 'Munich', 'Stuttgart')
tuple(filter(lambda x: x.startswith(('M', 'V')), cities))
('Madrid', 'Valencia', 'Munich')

5 – input

دستور input یک ورودی از کاربر می گیرد و آن را به صورت یک رشته باز می گرداند. این تابع یک ورودی اختیاری نیز می تواند بگیرد که در آن متنی که به کاربر در حین درخواست ورودی نشان داده می شود را می توانیم بنویسیم.

برای مثال کد زیر از کاربر می خواهد که اسم خود را وارد کند :

name = input('Enter your name: ')

و از آن برای سلام کردن به کاربر استفاده کنیم :

print('Hello {}'.format(name))
Hello Amanda

اگر بخواهیم از ورودی به عنوان یک عدد استفاده کنیم حتما باید آن را به int و یا float تبدیل کنیم، چون متغیر ما توسط input به عنوان یک رشته ذخیره می شود. در مثال زیر تبدیل ورودی به float با کمک دستور float() نشان داده شده است:

number_1 = float(input('Enter a number: '))
Enter a number: 2.5
number_2 = float(input('Enter another number: '))
Enter another number: 3.4

برای جمع زدن دو عدد اعشاری نیاز به تبدیل آنها به float داریم :

print('The sum is: {}'.format(number_1 + number_2))
The sum is: 5.9


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

در این قسمت به 5 تا از 9 تابع هایی که در پایتون بصورت پیش فرض وجود داره پرداختیم. در قسمت دوم این پست باقی این توابع رو برای شما می نویسیم.

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

منبع : www.towardsdatascience.com