الانتقال إلى المحتوى الرئيسي
الوحدة 9 · الدرس 1 من 433/36 في الدورة~12 min
دروس الوحدة (1/4)

تلميحات الكتابة: أنواع التعليقات التوضيحية

تلميحات الكتابة (التعليقات التوضيحية للكتابة) هي إعلانات اختيارية تقول "هذا المتغير/المعلمة له النوع X". لا تقوم Python بالتحقق منها في وقت التشغيل: فهي مخصصة لك ولمحررك (الإكمال التلقائي!) وأدوات مثل 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 عن طريق تنفيذ الأمر mypy script.py في المحطة الطرفية الخاصة بك.

جربه بنفسك

تمرين#python.m9.l1.e1
المحاولات: 0جارٍ التحميل…

حدد دالة `double(numbers: list[int]) -> list[int]` التي تُرجع قائمة بكل عنصر مضروبًا في 2. استدعيها باستخدام [1, 2, 3] وقم بتعيينها إلى `r`. تقييم "ر".

جارٍ تحميل المحرر…
إظهار التلميح

استخدم فهم القائمة أو حلقة for.

الحل متاح بعد 3 من المحاولات

تمرين المراجعة

تمرين#python.m9.l1.e2
المحاولات: 0جارٍ التحميل…

حدد `first_or_none(items: list[int]) -> int | لا شيء يُرجع العنصر الأول إذا كانت القائمة غير فارغة، وإلا فلا شيء. قم بتعيين `a = first_or_none([10, 20])` و`b = first_or_none([])`. قم بتقييم `(أ، ب)`.

جارٍ تحميل المحرر…
إظهار التلميح

`if items` يكون صحيحًا عندما لا تكون القائمة فارغة.

الحل متاح بعد 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 من المحاولات