مرکزی مواد پر جائیں
ماڈیول 9 · سبق 1 از 4کورس میں 33/36~12 min
ماڈیول اسباق (1/4)

قسم کے اشارے: تشریحی اقسام

قسم کے اشارے (قسم کی تشریحات) اختیاری اعلانات ہیں جو کہتے ہیں۔ "اس متغیر/پیرامیٹر کی قسم X ہے"۔ ازگر رن ٹائم پر ان کی تصدیق نہیں کرتا ہے۔ وہ آپ کے لیے ہیں، آپ کے ایڈیٹر (خود مکمل!) اور ٹولز جیسے mypy یا pyright جو جامد قسم کی جانچ کرتا ہے۔

متغیرات کی تشریح

Python
nome: str = "Ada"
anni: int = 36
attivo: bool = True
prezzi: list[float] = [1.2, 3.4]

نحو name: type = value ہے۔ قدر کے بغیر یہ خالص اعلان ہے:

Python
risultato: int  # nessuna assegnazione, solo "annuncio del tipo"

تشریحی افعال

Python
def saluta(nome: str, urlante: bool = False) -> str:
    s = f"Ciao {nome}"
    return s.upper() if urlante else s

def somma(numeri: list[int]) -> int:
    return sum(numeri)

نحو: param: type ہر پیرامیٹر کے لیے، -> type واپسی کے لیے۔ ایک فنکشن جو کچھ نہیں لوٹاتا ہے -> None استعمال کرتا ہے۔

بلٹ ان جنرک اقسام (Python 3.9+)

Python
nomi: list[str] = ["a", "b"]
mappa: dict[str, int] = {"x": 1}
coppia: tuple[int, str] = (1, "ok")
unici: set[int] = {1, 2, 3}

اختیاری اور یونین

ایک قدر جو ہو سکتی ہے None:

Python
def trova_utente(id: int) -> str | None:
    if id == 1:
        return "Ada"
    return None

X | None جدید نحو ہے (Python 3.10+)۔ مساوی: Optional[X] از typing۔ متعدد اقسام کی یونینوں کے لیے: int | str | float۔

ٹائپنگ: مفید ٹولز

Python
from typing import Any, Callable

def applica(f: Callable[[int], int], x: int) -> int:
    return f(x)

valore: Any = "qualunque cosa"  # disabilita il check
  • Any = "چیک نہ کریں" (تھوڑے سے استعمال کریں)۔
  • Callable[[arg1, arg2], return] = ایک فنکشن جو ان پیرامیٹرز کو لیتا ہے اور اس قسم کو واپس کرتا ہے۔

mypy: ٹائپ چیکر

آپ mypy کو انسٹال کرتے ہیں، mypy file.py کو چلاتے ہیں، اور یہ آپ کو بتاتا ہے کہ آیا قسمیں برابر ہیں:

Bash
$ mypy script.py
script.py:5: error: Argument 1 to "somma" has incompatible type "str"; expected "int"

mypy کے ساتھ اقسام کی جانچ کرنا

مترجم کے ذریعہ رن ٹائم کے وقت ازگر کے قسم کے اشارے نافذ نہیں کیے جاتے ہیں۔ انہیں پھانسی کے دوران نظر انداز کیا جاتا ہے. قسم کی درستگی کی توثیق کرنے کے لیے، آپ کو اپنے ٹرمینل میں کمانڈ mypy script.py پر عمل کرتے ہوئے ایک بیرونی جامد تجزیہ ٹول چلانا چاہیے جیسے mypy۔

خود ہی آزمائیں۔

ورزش#python.m9.l1.e1
کوششیں: 0لوڈ ہو رہا ہے…

ایک فنکشن `ڈبل(نمبر: فہرست[int]) -> list[int]` کی وضاحت کریں جو ہر عنصر کو 2 سے ضرب دے کر ایک فہرست لوٹاتا ہے۔ اسے [1, 2, 3] سے کال کریں اور `r` کو تفویض کریں۔ `r` کا اندازہ لگائیں۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

فہرست فہمی یا لوپ کے لیے ایک استعمال کریں۔

3 کوششوں کے بعد حل دستیاب ہے۔

ورزش کا جائزہ لیں۔

ورزش#python.m9.l1.e2
کوششیں: 0لوڈ ہو رہا ہے…

'first_or_none (آئٹمز: فہرست[int]) -> int | کی وضاحت کریں۔ None` جو پہلا عنصر لوٹاتا ہے اگر فہرست خالی نہیں ہے، ورنہ کوئی نہیں۔ تفویض کریں `a = first_or_none([10, 20])` اور `b = first_or_none([])`۔ `(a, b)` کا اندازہ لگائیں۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

'اگر آئٹمز' درست ہے جب فہرست خالی نہ ہو۔

3 کوششوں کے بعد حل دستیاب ہے۔

اضافی چیلنج

ورزش#python.m9.l1.e3
کوششیں: 0لوڈ ہو رہا ہے…

Write a function `double_value(n: int) -> int` that takes an integer, multiplies it by 2, and returns the result. Make sure to specify type hints for both the parameter and the return value. Finally, evaluate `double_value(5)`.

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

n: int کو بطور پیرامیٹر اور -> int فنکشن کے دستخط کے بعد استعمال کریں۔

3 کوششوں کے بعد حل دستیاب ہے۔