تعیین نوع متغیرها در پایتون 3

اشتراک‌گذاری

زبان‌ها معمولاً یا تعیین نوع پویا دارند؛ مانند کامن لیسپ، پایتون، جاوا اسکریپت یا دارای تعیین نوع ایستا هستند؛ مانند سی و سی‌پلاس‌پلاس، راست و دوباره کامن لیسپ (معمولاً پیاده‌سازی‌های مدرن کامن لیسپ، مانند SBCL، اجازه می‌دهند بنا به خواست برنامه‌نویس، قسمتی از کد، دارای تعیین نوع ایستا و قسمتی دارای تعیین نوع پویا باشد).

در پایتون، تعیین نوع متغیر‌ها، مقدار یا مقادیر بازگشتی توابع و متد‌ها و آرگومان‌های توابع اجباری نیست. اما می‌توانیم با تعیین نوع و استفاده از یک نرم‌افزار Linter به کاهش خطا‌های خود پیش از اجرا کمک کنیم.

def f(x: int) - > int:
    return x * 2 + 1

با این که تعیین نوع آرگومان یا ورودی تابع f که x باشد و مقدار بازگشت آن یعنی x*2 + 1 در اجرا تأثیری ندارد، اما زمانی که بخواهم مقدار بازگشت تابع f را با یک رشته نویسه (کاراکتر) جمع کنم به من اخطار داده می‌شود:

بدیهی است که اجرای این برنامه به وسیلهٔ پایتون نیز باعث خطا می‌شود. در مقابل زمانی که نوع ورودی و خروجی تابع را مشخص نمی‌کنم اخطاری داده نمی‌شود:

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

تعیین نوع متغیر‌ها

تغییر نوع یک متغیر زمان ایجاد، قالب زیر را دارد:

<variable_name>: <type> = <value>

برای مثال:

i: int = 10
s: str = “Hello”

اما در مورد مخازن پایتون زمانی که بخواهیم عناصر مخزن همه از یک نوع باشند دیگر تغییر نوع به این صورت کافی نیست. البته می‌توانیم متغیر my_list را به صورت لیست تعیین کنیم اما این تعیین به آنالیز‌گر و یا یک خوانندهٔ دیگر کد نمی‌گوید در لیست چه چیز‌هایی ذخیره می‌شوند.

برای تعیین نوع عناصر یک لیست یا فهرست باید از ماژول typing پایتون کمک بگیریم و به عنوان مثال مشخص کنیم که تمام عناصر یک لیست عدد صحیح هستند:

from typing import List

my_list: List[int] = [1,2,3]

حال زمانی که بخواهیم به لیست my_list یک رشته کاراکتر اضافه کنیم، نرم‌افزار لینتر خطا می‌دهد:

به همین صورت نیز می‌توانیم برای یک توپل مشخص کنیم چه نوع عناصری در آن وجود دارند و البته چه تعداد:

from typing import Tuple

t: Tuple[int, int, int] = (1, 2, 3)
d: Tuple[int, …] = (1, 2, 3, 4, 5, 6, 7)

و نهایتاً برای یک دیکشنری می‌توانیم نوع کلید و همچنین مقدار را مشخص کنیم:

from typing import Dict

d: Dict[int, int] = {1: 10, 2: 13}

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

توجه کنید از پایتون ۳٫۹ به بعد استفاده از ماژول typing برای تعیین نوع دیکشنری‌ها، لیست‌ها و توپل‌ها منسوخ شده و می‌توانید از خود نوع داده‌ها استفاده کنید:

d: dict[int, int] = {1: 10}
my_list: list[int] = [1, 2, 3]
mt: tuple[int, int] = (1, 2)

نوع Callable نیز در پایتون برای هر «قابل صدازدنی» مانند توابع یا کلاس‌هایی که __call__ را پیاده‌سازی می‌کنند وجود دارد. در مثال زیر ورودی تابع exec می‌تواند هر تابعی باشد که دارای تک‌ورودی int و خروجی float است:

from typing import Callable

def exec(cb: Callable[[int], float]) → None:
    …

تعیین نوع ورودی و خروجی توابع و متد‌ها

تابع func در مثال زیر دو ورودی x و y هر دو از نوع عدد صحیح دریافت می‌کند و خروجی آن یک عدد صحیح است:

def func(x: int, y: int) → int:
    return 2**y + 2**y – 1

برای متد‌ها نیز به همین شکل عمل می‌کنیم.

کلاس‌های داده

در پایتون با استفاده از دیکوریتور(decorator) dataclass می‌توانید کلاس‌های داده ایجاد کنید و نوع ویژگی‌ها را مشخص کنید:

from dataclasses import dataclass

@dataclass
class Human:
    age: int
    name: str
    children: list[str]

توجه کنید که این دیکوریتور خود نوع داده‌ها را زمان ایجاد نمونه از کلاس بررسی نمی‌کند.

اشتراک‌گذاری

Jaxx Wallet Download

Jaxx Liberty Wallet

Jaxx Wallet

gem visa login

gem visa login australia