• בלוג
  • שלושה פיצ'רים מלהיבים במיוחד בפייתון 3.12

שלושה פיצ'רים מלהיבים במיוחד בפייתון 3.12

06/11/2023

פייתון 3.12 יצאה לא מזמן והביאה איתה מספר שיפורים שיכולים להשפיע כמעט על כל אחד ואחת מאיתנו. אלה ה-3 שאני הכי אהבתי.

1. תחביר קל יותר לפונקציות גנריות

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

from typing import TypeVar

StringOrNumber = TypeVar('StringOrNumber', str, int)

def add(x: StringOrNumber, y: StringOrNumber) -> StringOrNumber:
  return x + y

גירסה 3.12 הוסיפה תמיכה ב PEP 695 שאומר שאנחנו יכולים להגדיר פונקציות גנריות כמו בסקאלה כלומר:

def max[T](args: Iterable[T]) -> T:
    ...

הבעיה היחידה היא שעדיין אי אפשר לשחק עם הפיצ'ר כי גם ב mypy וגם ב PyCharm עדיין מפתחים את התמיכה, אבל לפחות יש למה לצפות.

2. קינון של מחרוזות f

הפצ'ר הזה כבר עובד ופותר בעיה מאוד מעצבנת עם מחרוזות f:

songs = ['Take me back to Eden', 'Alkaline', 'Ascensionism']
print(f"This is the playlist: {", ".join(songs)}")

וכן ראיתם נכון - בקוד הפייתון שבתוך הסוגריים המסולסלים מחרוזת כתבתי מרכאות ופייתון לא נלחץ.

3. הגדרת טיפוס ל kwargs עם TypedDict

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

from typing import TypedDict, Unpack

class Movie(TypedDict):
  name: str
  year: int

def foo(**kwargs: Unpack[Movie]): ...

זאת יכולת שהיתה חזרה הרבה זמן וכמעקף הרבה פעמים ויתרתי על לקבל **kwargs לפונקציה והעברתי ממש מילון. יכולת זו כבר עובדת ב mypy. ממה שהבנתי ב PyCharm זה עדיין בפיתוח.

רשימת השינויים המלאה של 3.12 נמצאת כאן: https://docs.python.org/3/whatsnew/3.12.html

לכו להסתכל וספרו בתגובות איזה פיצ'רים אתם הכי אהבתם.