دروس الوحدة (1/4)
تلميحات الكتابة: أنواع التعليقات التوضيحية
تلميحات الكتابة (التعليقات التوضيحية للكتابة) هي إعلانات اختيارية تقول "هذا المتغير/المعلمة له النوع X". لا تقوم Python بالتحقق منها في وقت التشغيل: فهي مخصصة لك ولمحررك (الإكمال التلقائي!) وأدوات مثل 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 عن طريق تنفيذ الأمر mypy script.py في المحطة الطرفية الخاصة بك.
جربه بنفسك
حدد دالة `double(numbers: list[int]) -> list[int]` التي تُرجع قائمة بكل عنصر مضروبًا في 2. استدعيها باستخدام [1, 2, 3] وقم بتعيينها إلى `r`. تقييم "ر".
إظهار التلميح
استخدم فهم القائمة أو حلقة for.
الحل متاح بعد 3 من المحاولات
تمرين المراجعة
حدد `first_or_none(items: list[int]) -> int | لا شيء يُرجع العنصر الأول إذا كانت القائمة غير فارغة، وإلا فلا شيء. قم بتعيين `a = first_or_none([10, 20])` و`b = first_or_none([])`. قم بتقييم `(أ، ب)`.
إظهار التلميح
`if items` يكون صحيحًا عندما لا تكون القائمة فارغة.
الحل متاح بعد 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 من المحاولات