להתראות TypeVar

27/05/2026

אם יש תחביר שאני שמח להיפרד ממנו בעולם זה TypeVar של פייתון. בסך הכל רציתי להגדיר פונקציה שמחזירה את מה שהיא קיבלה אבל פייתון עד גרסה 3.12 החליט שאני צריך להגדיר איתה גם משתנה גלובאלי. זה נראה ככה:

from typing import TypeVar

T = TypeVar("T")

def same(x: T) -> T:
    return x

וכל זה רק בשביל שיהיה מה לכתוב אחרי הנקודותיים בתור הטיפוס של x.

החל מפייתון 3.12 אפשר לשכוח מכל הכאב ראש הזה ולאמץ תחביר שמזכיר את כתיב ה Generics של שפות אחרות:

def same[T](x: T) -> T:
    return x

ולקבל את אותה תוצאה בדיוק.

וכן זה עובד גם עם יותר ממשתנה גנרי אחד:

def swap[T, S](x: T, y: S) -> tuple[S, T]:
    return y, x

עדיין אולי תרצו את הכתיב הישן בשביל להגביל את הטיפוסים האפשריים של T בעזרת הפרמטרים של TypeVar או bound, אבל ל 90% מהמקרים הכתיב החדש נקי וקל יותר.