مرور ساده و سریع بر Python Types

ما در پایتون مثل تقریبا تمام زبان های برنامه نویسی 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 پایتون استفاده کنید تایپ های زیر جزو تایپ های ساده بحساب میاد و نکته خاصی نداردintfloatboolbytesتایپ های بعدی که در ادامه معرفی میشوند در ورژن های 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): passlist:به چند صورت میتوان از لیست استفاده کرد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]): passitems1: تاپلی از اعداد صحیح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 معتبر هست.