פייתון 3.9: מה חדש וטוב יותר

Python 3.9, שפורסם היום, מקדים שינויים משמעותיים הן בתכונות השפה והן באופן פיתוח השפה. פייתון צבר פופולריות בשנים האחרונות, והשימוש בו התפוצץ באזורים מתפתחים במהירות כמו מדע נתונים ולמידת מכונה. הפרויקט עובד קשה בכדי לעמוד בקצב הדרישות החדשות. 

הנה סקירה של כל התכונות החדשות הגדולות ב- Python 3.9.

פייתון עובר למחזור שחרור שנתי

עד לנקודה זו פיתון פותח ושוחרר בקצב של שמונה עשרה חודשים. PEP 602 הציע לצוות הפיתוח של פייתון לאמץ מחזור שחרור שנתי, והצעה זו התקבלה. 

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

ציר הזמן החדש פירושו שפייתון 3.9 יישלח באוקטובר 2020. פייתון 3.10 התחיל רשמית בפיתוח קדם-אלפא ב -19 במאי 2020, יעבור לשלב פיתוח האלפא כאשר פייתון 3.9 יישלח, וישלח באוקטובר 2021. מהדורות עתידיות של פיתון יעקבו אחר אותו דפוס.

Python הופך להיות מהיר יותר כברירת מחדל

כל תיקון של Python נהנה משיפור ביצועים ביחס לגרסה הקודמת. Python 3.9 מגלגל שני שיפורים גדולים המגבירים את הביצועים מבלי לדרוש שינויים בקוד הקיים.

השיפור הראשון כרוך בשימוש רב יותר vectorcallבפרוטוקול שהוצג בפייתון 3.8. vectorcallמבצעת שיחות פונקציות נפוצות רבות על ידי מזעור או ביטול אובייקטים זמניים שנוצרו לשיחה. ב- Python 3.9, כמה מובנים ב- Python - range, tuple, set, frozenset, list, dict- משתמשים באופן vectorcallפנימי כדי לזרז את הביצוע.

משפר הביצועים הגדול השני הוא ניתוח יעיל יותר של קוד המקור של פייתון. המנתח החדש לזמן הריצה של CPython לא נועד לטפל בבעיות ביצועים, אלא להתמודד עם חוסר עקביות פנימית בניתוח המקורי. עם זאת, יתרון חשוב לשוליים הוא ניתוח מהיר יותר, במיוחד עבור נפחי קוד גדולים.

עוד מיתרי פיתון ופונקציות מילון

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

מעצבים מאבדים כמה מגבלות

מעצבים מאפשרים לך לעטוף את פונקציות פייתון כדי לשנות את התנהגויותיהם באופן תכנותי. בעבר, מעצבים יכולים להיות מורכבים רק מסמל @, שם (למשל func) או שם מנוקד ( func.method) ואופציה משיחה אחת ( func.method(arg1, arg2)). עם Python 3.9, מעצבים יכולים כעת לכלול כל ביטוי חוקי.

דרך ארוכת שנים לעקוף את המגבלה הזו הייתה ליצור פונקציה או ביטוי למבדה שיעמדו על ביטוי מורכב יותר כאשר משתמשים בהם כמקשטים. עכשיו כל ביטוי יעשה, בתנאי שהוא יניב משהו שיכול לתפקד כמקשט.

פעולות חדשות מסוג פיתון

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

שתי תכונות חדשות עבור רמזים לסוגים והערות סוג עשו את דרכן לפייתון 3.9. באחת מהן, רמזים להקליד לתוכן האוספים - למשל רשימות ומילונים - זמינים כעת בפייתון באופן מקורי. זה אומר שאתה יכול למשל לתאר רשימה כ list[int] - רשימה של מספרים שלמים - מבלי שתצטרך typingשהספריה תעשה את זה.

התוספת השנייה למנגנוני ההקלדה של פייתון היא פונקציה גמישה והערות משתנות. זה מאפשר שימוש Annotatedבסוג לתיאור סוג באמצעות מטה-נתונים שניתן לבחון מבעוד מועד (בעזרת כלי מוך) או בזמן ריצה. לדוגמה, Annotated[int, ctype("char")]ניתן להשתמש בו לתיאור מספר שלם שיש לראותו charכסוג ב- C. כברירת מחדל, פייתון לא יעשה דבר עם ביאור כזה, אך הוא יכול לשמש את קודני הקוד. 

שיפורים בפנימיות הפיתון

ניקוי, זיקוק ומודרניזציה של הפנימיות של פייתון היא יוזמה מתמשכת עבור מפתחי פיתון, ולפייתון 3.9 יש כמה שינויים ברוח זו.

הראשון הוא עיצוב מחדש של האופן שבו מודולים מתקשרים עם מכונות הייבוא. מודולי הרחבה של פייתון, שנכתבו ב- C, עשויים להשתמש כעת במנגנון טעינה חדש שגורם להם להתנהג יותר כמו מודולי פיתון רגילים בעת הייבוא. מודולים כמה בספריה הסטנדרטית של פייתון החדש לתמוך בהתנהגות זו: _abc, audioop, _bz2, _codecs, _contextvars, _crypt, _functools, _json, _locale, operator, resource, time, _weakref. מנגנון הטעינה החדש לא רק מאפשר לטפל במודולי הרחבה בצורה גמישה יותר על ידי Python, אלא גם מאפשר יכולות חדשות כגון התנהגויות חיבור מתקדמות.

יוזמת הניקוי השנייה היא ABI פנימי יציב עבור CPython, כזה המובטח לכל אורך חייו של Python 3. מבחינה היסטורית, כל תיקון מרכזי של Python לא היה תואם ל- ABI עם גרסאות קודמות, ודורש לבצע קומפילציה של מודולי הרחבה לכל גרסה חדשה. מעתה ואילך, כל מודולי הרחבה המשתמשים ב- ABI היציב יעבדו על גרסאות Python. עם Python 3.9, את המודולים הבאים בספרייה הסטנדרטית להשתמש היציבה ABI: audioop, ast, grp, _hashlib, pwd, _posixsubprocess, random, select, struct, termios, zlib.

שינויים אחרים בפייתון 3.9

  • הספרייה הסטנדרטית של פייתון תומכת כעת במאגר אזור הזמן של IANA. מסד הנתונים האמור מטופח ונמצא בשימוש נרחב, ושיש דרך ישירה להשתמש בו בספריית הזמן של פייתון תהיה חוסכת זמן גדולה.
  • שיטות מחרוזת חדשות מאפשרות הסרה קלה של קידומות וסיומות. זהו אחד מאותם תרחישים שימושיים יומיומיים שדרשו מעט יותר מדי פלטה ממה שנראה נחוץ. החדש .removeprefix()ואת .removesuffix()שיטות להחזיר עותק שונה של מחרוזת מינוס קידומת או סיומת הנדון, ובלבד שהם קיימים במחרוזת.

איך לעשות יותר עם פייתון

  • 4 בודקים מסוג פייתון כדי לשמור על ניקיון הקוד שלך
  • סגנון פייתון: 5 כלים לניקוי קוד הפייתון שלך
  • כיצד לעבוד עם סוג הנתונים של רשימת Python
  • כיצד לארוז אפליקציות פייתון עם מזוודת BeeWare
  • כיצד להפעיל את אנקונדה זה לצד זה עם פיתונים אחרים
  • כיצד להשתמש במשקפי נתונים של פייתון
  • התחל לעבוד עם אסינכרון בפייתון
  • כיצד להשתמש ב- asyncio בפייתון
  • 3 צעדים לשיפוץ אסינכרון של פייתון
  • כיצד להשתמש ב- PyInstaller ליצירת הפעלות של Python
  • מדריך Cython: כיצד להאיץ את Python
  • כיצד להתקין את פייתון בדרך החכמה
  • כיצד לנהל פרויקטים של פייתון באמצעות שירה
  • כיצד לנהל פרויקטים של פייתון באמצעות Pipenv
  • Virtualenv ו- venv: הסברים על סביבות וירטואליות של Python
  • Python virtualenv ו- venv do's and donts
  • הסבר על השחלת פיתון ותהליכי משנה
  • כיצד להשתמש בבאגים של פייתון
  • כיצד להשתמש ב- timeit לפרופיל קוד פייתון
  • כיצד להשתמש ב- cProfile לפרופיל קוד פייתון
  • כיצד להמיר את פייתון ל- JavaScript (ובחזרה)