یک گیک و عاشق تکنولوژی, بکند دولوپر پایتون و دانشجوی مهندسی کامپیوتر
مرور ساده و سریع بر Python Types
![](https://files.virgool.io/upload/users/2200140/posts/tr37uxodmhrt/gbd5autncc7p.png)
ما در پایتون مثل تقریبا تمام زبان های برنامه نویسی type annotations یا type hints رو داریم(از ورژن 3.5 به بعد اضافه شده) فقط با این تفاوت که داخل پایتون اجباری به رعایت این کار نیست اما این به این معنی نیست که نباید اینکارو انجام داد.
اگه میخاید:
- کد استانداردی داشته باشید
- ماژول یا لایبرری بنویسید
- با تیم یا داخل شرکتی کارکنید
شما مجبورید از این ویژگی پایتون استفاده کنید و فکر استفاده نکردنشو از سرتون بیرون کنید.
همیشه بهترین مرجع داکیومنت های رسمی هست که از این لینک میتونید بخش typing داکیومنت پایتون رو بخونید اما از اونجایی که زمان بر هست و ممکنه با انگلیسی بودنش مشکل داشته باشید من اینجا چیزای پایه ای و قسمت های مهمشو براتون توضیح میدم و برای یادگیری عمیق تر به داکیومنت مراجعه کنید.
مشخص کردن نوع Type
در حالت کلی اعلام کردن type متغییر به این صورت انجام میشه :
var: type = value
میتونیم به همین صورت متغییری را تعریف کنیم یا نوع property کلاس یا نوع ورودی فاکشن را اعلام کنیم
age: int = 20
class Person:
name: str
def f(item: str):
pass
و همچنین نوع خروجی تابع را با علامت -> سپس type مدنظر مشخص میشه :
def say_hello(name: str) -> str:
return 'Hello ' + name
در مثال بالا فانکشن ما یک پارامتر تحت اسم name داره که گفتیم از نوع str باید باشه و خروجی هم یک str هست.
حالا بنظرتون اگه ما بجای string تایپ دیگ ای به آرگومان تابع بدیم چی میشه؟
اتفاق خاصی نمیفته(فارق از اینکه Hello میتونه با اون تایپ جمع بشه یا نه)
اجرای کد اروری به ما نمیده این اعلام کردن تایپ ها به دو دلیله
- برای مشخص بودن نوع متغییر بین خودمون یا سایر هم تیمی هایی که روی کد کار میکنن
- باعث میشه IDE ما بفهمه چه چیزی باید فرستاده بشه یا برگردونده بشه که باز این خودش باعث بهتر کارکردن snippets و نشون دادن warning های بهتر برای دیباگ کردن میشه.
انواع types
شما میتونید از type های built-in پایتون استفاده کنید
تایپ های زیر جزو تایپ های ساده بحساب میاد و نکته خاصی ندارد
- int
- float
- bool
- bytes
تایپ های بعدی که در ادامه معرفی میشوند در ورژن های 3.8 و قبل تر باید از ماژول typing اون رو import میکردید اما از 3.9 و به بعد این کار منسوخ شده و باید مستقیم از همون تایپ بدون ایمپورت کردن استفاده کرد برای مثال تایپ لیست در 3.8 از typing.List استفاده میشد اما در 3.9 از list استفاده میشود
#3.8 Version
from typing import List
def f(item: List):
pass
#3.9 Version
def f(item: list):
pass
list:
به چند صورت میتوان از لیست استفاده کرد
def f(items1: list, items2: list[int], items3: list[list[int]]):
pass
هر پارامتر به این صورت عمل میکند
- items1 : هر نوع لیستی را میتوان فرستاد
- items2: لیستی که فقط اعداد صحیح دارد
- items3: لیستی که درون آن لیستی از عداد صحیح وجود دارد(میتوان یک ماتریس دو بعدی فرض کرد)
و به همین صورت میتوان بسته به نیاز نوع لیست مدنظر اون رو تعریف کرد
tuple :
def f(items1: tuple[int],items2: tuple[float,int,int]):
pass
- items1: تاپلی از اعداد صحیح
- items2: تاپلی که سه عضو دارد اولی عدد اعشاری دومی و سومی اعداد صحیح
dict :
def f(prices: dict[str,int]):
pass
این نوع تایپ برای پارامتر prices به این معنی هست که دیکشنری کلید های str و مقادیر int دارد
جزئیات بیشتر و سایر تایپ های دیگه رو میتونید داخل داکیومنت رسمی بخونید.
قابلیت های بیشتر
شما میتونید:
- چند حالت رو برای نوع تایپ اعلام کنید
def f(item : str | int):
pass
- برای تایپ مدنظر alias قرار بدین
type Matrix2d = list[list[int]]
def sum_matrix(m1: Matrix2d, m2: Matrix2d):
pass
- فقط مقادیر مشخصی رو بگیرین
from typing import Literal
def open_helper(file: str, mode: Literal['r', 'rb', 'w', 'wb']) -> str:
...
- مشخص کنید مقدار متغییر قرار نیست تغییر بکنه
from typing import Final
MAX_SIZE: Final = 9000
و بسیاری قابلیت فراوون دیگه
تا اینجا فقط خواستم یه دیدگاهی بگیرین که این سیستم چطور کار میکنه و چه کارایی از پسش برمیاد, و چون سیستم تایپینگ پایتون توی هر ورژن دچار تغییرات زیادی میشه ممکنه بعضی از چیز های گفته شده توی ورژن های جدیدتر منسوخ بشه در حال حاضر تا ورژن 3.12 معتبر هست.
مطلبی دیگر از این انتشارات
آموزش تزریق وابستگی در برنامه نویسی اندروید – Dependency Injection در Android
مطلبی دیگر از این انتشارات
چطور یک الگوریتم مسیریابی بنویسیم؟
مطلبی دیگر از این انتشارات
اگر این نکات رو رعایت نمیکنی هیچ وقت برنامه نویس نشو!