4 תכונות חזקות שפייתון עדיין חסר

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

לדוגמא, Python 3.8 הציג תחביר חדש למטלות מקוונות ("מפעיל סוסים") שהופך פעולות מסוימות לתמציתיות יותר. שיפור תחביר נוסף שאושר לאחרונה, התאמת תבניות, יקל על כתיבת קוד שמעריך אחד המקרים האפשריים הרבים. שתי התכונות הללו היו בהשראת נוכחותן ותועלתן בשפות אחרות.

והם רק שניים מתוך שלל תכונות שימושיות שניתן להוסיף לפייתון כדי להפוך את השפה לביטוי יותר, עוצמתי יותר, מתאים יותר לעולם התכנות המודרני. מה עוד נרצה? להלן ארבע תכונות שפה נוספות שיכולות להוסיף משהו בעל ערך אמיתי לפייתון - שניים שאולי נקבל, ושניים כנראה שלא נקבל. 

קבועים אמיתיים

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

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

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

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

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

עומס יתר אמיתי וגנריות

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

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

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

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

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

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

אופטימיזציות של זנב מחדש

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

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

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

למבדות מרובות שורות

Lambdas, או פונקציות אנונימיות, הפכו אותו לפייתון רק לאחר התנגדות מסוימת מצד יוצר השפה גווידו ואן רוסום. מכיוון שקיימות למבדות פייתון כעת, הן מוגבלות מאוד: הן מאפשרות לך להשתמש רק בביטוי יחיד (למעשה כל דבר מימין לסימן שווה בפעולת הקצאה) כגוף הפונקציה. אם אתה רוצה חסימה מלאה של הצהרות, פשוט תפרוט אותן ותעשה מהן פונקציה ממשית.

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

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

למבדות רב-שורות כנראה לא מתרחשות בפייתון.

קרא עוד על פייתון:

  • פייתון 3.9: מה חדש וטוב יותר
  • התכונות החדשות הטובות ביותר ב- Python 3.8
  • ניהול פרויקטים טוב יותר של פייתון עם שירה
  • Virtualenv ו- venv: הסברים על סביבות וירטואליות של Python
  • Python virtualenv ו- venv do's and donts
  • הסבר על השחלת פיתון ותהליכי משנה
  • כיצד להשתמש בבאגים של פייתון
  • כיצד להשתמש ב- timeit לפרופיל קוד פייתון
  • כיצד להשתמש ב- cProfile לפרופיל קוד פייתון
  • התחל לעבוד עם אסינכרון בפייתון
  • כיצד להשתמש ב- asyncio בפייתון
  • כיצד להמיר את פייתון ל- JavaScript (ובחזרה)
  • Python 2 EOL: איך לשרוד את סוף Python 2
  • 12 פיתונים לכל צורך בתכנות
  • 24 ספריות פייתון לכל מפתח פיתון
  • 7 מזהי פייתון מתוקים שאולי פספסתם
  • 3 ליקויים גדולים בפייתון - והפתרונות שלהם
  • 13 מסגרות אינטרנט של פייתון בהשוואה
  • 4 מסגרות מבחן פייתון כדי למחוץ את החרקים שלך
  • 6 תכונות פייתון חדשות נהדרות שאתה לא רוצה לפספס
  • 5 הפצות פיתון לשליטה בלמידת מכונה
  • 8 ספריות פיתון נהדרות לעיבוד שפות טבעיות
  • 6 ספריות פיתון לעיבוד מקביל
  • מה זה PyPy? פיתון מהיר יותר ללא כאבים
  • מה זה סיטון? פיתון במהירות C