שיעורי מודול (1/4)
רמזים לסוגים: הערות לסוגים
רמזים לסוג (הערות סוג) הם הצהרות אופציונליות שאומרים "למשתנה/פרמטר הזה יש סוג X". Python לא מאמת אותם בזמן ריצה: הם מיועדים לך, לעורך שלך (השלמה אוטומטית!) ולכלים כמו mypy או זכויות יוצרים המבצעות בדיקת סוגים סטטית.
ביאור משתנים
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
רמזי הסוג של Python אינם נאכפים בזמן הריצה על ידי המתורגמן; הם מתעלמים במהלך הביצוע. כדי לאמת את נכונות הסוג, עליך להפעיל כלי ניתוח סטטי חיצוני כמו mypy על ידי ביצוע הפקודה mypy script.py במסוף שלך.
נסה זאת בעצמך
הגדר פונקציה `double(numbers: list[int]) -> list[int]` שמחזירה רשימה עם כל אלמנט כפול 2. קרא לה עם [1, 2, 3] והקצה ל-`r`. הערך 'r'.
הצג רמז
השתמש בהבנת רשימה או בלולאת for.
הפתרון זמין לאחר 3 ניסיונות
סקירת התרגיל
הגדר `first_or_none(items: list[int]) -> int | None` שמחזיר את הרכיב הראשון אם הרשימה אינה ריקה, אחרת ללא. הקצה `a = first_or_none([10, 20])` ו-`b = first_or_none([])`. הערך את `(א, ב)`.
הצג רמז
'אם פריטים' נכון כאשר הרשימה אינה ריקה.
הפתרון זמין לאחר 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 ניסיונות