ماڈیول اسباق (1/4)
قسم کے اشارے: تشریحی اقسام
قسم کے اشارے (قسم کی تشریحات) اختیاری اعلانات ہیں جو کہتے ہیں۔ "اس متغیر/پیرامیٹر کی قسم X ہے"۔ ازگر رن ٹائم پر ان کی تصدیق نہیں کرتا ہے۔ وہ آپ کے لیے ہیں، آپ کے ایڈیٹر (خود مکمل!) اور ٹولز جیسے mypy یا pyright جو جامد قسم کی جانچ کرتا ہے۔
متغیرات کی تشریح
nome: str = "Ada"
anni: int = 36
attivo: bool = True
prezzi: list[float] = [1.2, 3.4]نحو name: type = value ہے۔ قدر کے بغیر یہ خالص اعلان ہے:
risultato: int # nessuna assegnazione, solo "annuncio del tipo"تشریحی افعال
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+)
nomi: list[str] = ["a", "b"]
mappa: dict[str, int] = {"x": 1}
coppia: tuple[int, str] = (1, "ok")
unici: set[int] = {1, 2, 3}اختیاری اور یونین
ایک قدر جو ہو سکتی ہے None:
def trova_utente(id: int) -> str | None:
if id == 1:
return "Ada"
return NoneX | None جدید نحو ہے (Python 3.10+)۔ مساوی: Optional[X] از typing۔
متعدد اقسام کی یونینوں کے لیے: int | str | float۔
ٹائپنگ: مفید ٹولز
from typing import Any, Callable
def applica(f: Callable[[int], int], x: int) -> int:
return f(x)
valore: Any = "qualunque cosa" # disabilita il checkAny= "چیک نہ کریں" (تھوڑے سے استعمال کریں)۔Callable[[arg1, arg2], return]= ایک فنکشن جو ان پیرامیٹرز کو لیتا ہے اور اس قسم کو واپس کرتا ہے۔
mypy: ٹائپ چیکر
آپ mypy کو انسٹال کرتے ہیں، mypy file.py کو چلاتے ہیں، اور یہ آپ کو بتاتا ہے کہ آیا قسمیں برابر ہیں:
$ mypy script.py
script.py:5: error: Argument 1 to "somma" has incompatible type "str"; expected "int"mypy کے ساتھ اقسام کی جانچ کرنا
مترجم کے ذریعہ رن ٹائم کے وقت ازگر کے قسم کے اشارے نافذ نہیں کیے جاتے ہیں۔ انہیں پھانسی کے دوران نظر انداز کیا جاتا ہے. قسم کی درستگی کی توثیق کرنے کے لیے، آپ کو اپنے ٹرمینل میں کمانڈ mypy script.py پر عمل کرتے ہوئے ایک بیرونی جامد تجزیہ ٹول چلانا چاہیے جیسے mypy۔
خود ہی آزمائیں۔
ایک فنکشن `ڈبل(نمبر: فہرست[int]) -> list[int]` کی وضاحت کریں جو ہر عنصر کو 2 سے ضرب دے کر ایک فہرست لوٹاتا ہے۔ اسے [1, 2, 3] سے کال کریں اور `r` کو تفویض کریں۔ `r` کا اندازہ لگائیں۔
اشارہ دکھائیں۔
فہرست فہمی یا لوپ کے لیے ایک استعمال کریں۔
3 کوششوں کے بعد حل دستیاب ہے۔
ورزش کا جائزہ لیں۔
'first_or_none (آئٹمز: فہرست[int]) -> int | کی وضاحت کریں۔ None` جو پہلا عنصر لوٹاتا ہے اگر فہرست خالی نہیں ہے، ورنہ کوئی نہیں۔ تفویض کریں `a = first_or_none([10, 20])` اور `b = first_or_none([])`۔ `(a, b)` کا اندازہ لگائیں۔
اشارہ دکھائیں۔
'اگر آئٹمز' درست ہے جب فہرست خالی نہ ہو۔
3 کوششوں کے بعد حل دستیاب ہے۔
اضافی چیلنج
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 کوششوں کے بعد حل دستیاب ہے۔