דילוג לתוכן המרכזי
מודול 9 · שיעור 1 מתוך 433/36 בקורס~12 min
שיעורי מודול (1/4)

רמזים לסוגים: הערות לסוגים

רמזים לסוג (הערות סוג) הם הצהרות אופציונליות שאומרים "למשתנה/פרמטר הזה יש סוג X". Python לא מאמת אותם בזמן ריצה: הם מיועדים לך, לעורך שלך (השלמה אוטומטית!) ולכלים כמו mypy או זכויות יוצרים המבצעות בדיקת סוגים סטטית.

ביאור משתנים

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

רמזי הסוג של Python אינם נאכפים בזמן הריצה על ידי המתורגמן; הם מתעלמים במהלך הביצוע. כדי לאמת את נכונות הסוג, עליך להפעיל כלי ניתוח סטטי חיצוני כמו mypy על ידי ביצוע הפקודה mypy script.py במסוף שלך.

נסה זאת בעצמך

פעילות גופנית#python.m9.l1.e1
ניסיונות: 0טוען...

הגדר פונקציה `double(numbers: list[int]) -> list[int]` שמחזירה רשימה עם כל אלמנט כפול 2. קרא לה עם [1, 2, 3] והקצה ל-`r`. הערך 'r'.

טוען עורך...
הצג רמז

השתמש בהבנת רשימה או בלולאת for.

הפתרון זמין לאחר 3 ניסיונות

סקירת התרגיל

פעילות גופנית#python.m9.l1.e2
ניסיונות: 0טוען...

הגדר `first_or_none(items: list[int]) -> int | None` שמחזיר את הרכיב הראשון אם הרשימה אינה ריקה, אחרת ללא. הקצה `a = first_or_none([10, 20])` ו-`b = first_or_none([])`. הערך את `(א, ב)`.

טוען עורך...
הצג רמז

'אם פריטים' נכון כאשר הרשימה אינה ריקה.

הפתרון זמין לאחר 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 ניסיונות