פיתוח בפייתון אונליין, כיצד לפתח נכון ויעיל
בשנים האחרונות פייתון הפכה לאחת השפות המובילות בעולם הפיתוח והינה מובילה בעולמות הבינה המלאכותית, אבטחת מידע, סייבר, ניהול רשת ואלגוריתמי מסחר בשוק ההון.
פייתון היא שפה פופולרית בקרב מפתחים, הן בחברות ענק כגון פייסבוק, גוגל והן בחרות קטנות וסטארט-אפים.
פרויקטים בפייתון שימושים בתחומים רבים: עיבוד תמונה, בינה מלאכותית, אוטומציה, עיבוד נתונים, תוכנות עם ממשק גרפי ועוד.
פייתון היא שפה אינטואיטיבית המאפשרת ביצוע פעולות מורכבות בצורה פשוטה מאוד, על כן שפה זו היא שימושית מאוד בעולמות הסייבר, האקרים משתמשים בה לבנות כלים מיוחדים המשמשים אותם בזמן מחקרים ופריצות שונות.
אחת הסיבות שפייתון הפכה לכל כך פופולרית היא שקל מאוד ללמוד את השפה ביחס לשפות אחרות.
הביקוש לשפה עלה ולכן אנחנו ב-ITSafe הקלטנו עבורכם קורס פייתון אונליין מקיף המכיל 760 דק' ו-76 שיעורים שילמד אתכם את כל הנדרש בתעשיית ההייטק.
במאמר זה ובסדרת השיעורים הבאה נעסוק בפיתוח נכון והשגת ביצועים גבוהים יותר בשפה פייתון.
מאמר זה מתאים לאנשים עם הבנה בסיסית בפייתון ,אנו פחות נתמקד בפיתוח בשפה אלא יותר בהבדלים בין שיטות הפיתוח השונות וטעויות נפוצות בעת הכתיבה בפייתון.
נעשה השוואת ביצועים בין שיטות פיתוח שונות ואפילו תוכלו לקחת חלק בתחרות הפיתוח שלנו!
חוקי התחרות:
- נקודת המוצא שלכם במשימה הינה רשימה המכילה את כל המספרים מ-1 ועד 1,000,000,000 (1 מיליארד ) ועליכם לבנות תוכנה שתחשב את סכום המספרים תוך כדי התיחסות לרשימה!
- את התוכנה אנו נריץ במכונה וירטואלית מסוג Debian, 4 מעבדים 4,096 זיכרון וללא כרטיס רשת.
- יש להשתמש בספריות סטנדרטיות בלבד (אין להשתמש ב-pip להתקנה).
- שימו לב, אין אינטרנט במכונה ולכן את החישוב יש לבצע על המכונה עצמה! לא להשתמש בפעולות RPC.
- בראש כל פרויקט יש לרשום באיזה פייתון כתבתם את הקוד שלכם בצורה הבאה בהתאמה:
#!/usr/bin/python2
#!/usr/bin/python3
פרסים:
משתתפים שהינם תלמידי הקורסים יקבלו:- מקום ראשון ייקבל 300 שקלים
- מקום שני ייקבל 200 שקלים
- מקום ראשון ייקבל קורס לבחירותו במתנה
- מקום שני ייקבל קורס לבחירתו ב-100 שקלים
לסרטון הראשון:
לסרטון השני:
לסרטון השלישי:
String Concatenation
טעות נפוצה היא לבנות פונקציה מבוססת string מכיוון ש-string ב-python הוא immutable ושרשור הוא בעצם הצבעה חדשה.
כל פעם שאתם מבצעים השמת ערך בתוך משתנה מסוג טקסט פייתון מקצה תא חדש בזיכרון ומכניס את הערך לשם. התא הקודם נשאר בזיכרון ויתנקה במהלך זמן הריצה של התוכנה באמצעות מנגנון שנקרא Garbage Collection.
דוגמה לתרגיל בדיקת ביצועים בעבודה עם שרשור טקסטים:
כך גם בעת ביצוע concatenation בסיסי, מומלץ להשתמש ב-format ולא להשתמש ב+.
אפשר גם בעת הדפסה מרובה להשתמש ב-sys.stdout.wrie מכיוון שהינו מהיר יותר מ-print
Data Aggregation
לא לבצע הכנת נתונים שהם Compute Based לפונקציה עדיף שהפונקציה תעשה את הכל בעצמה, כמו כן כל הרצת פונקציה גורמת למחשב ליצור stack frame עבור הפונקציה שיכיל את הכל המשתנים הפנימיים של הפונקציה ויעביר את הערכים לstack frame בעת יציאה מהפונקציה ה-stack frame נסגר.
שימוש בפונקציות ללא סיבה מוצדקת יגרום להאטה של התוכנה מכיוון שהתוכנה תבזבז זמן יקר על ביצוע פעולות מיותרות וניהול ה-stack frame של כל פונקציה ופונקציה.
Built-in Functions
לא להמציא את הגלגל, פונקציה פנימית של השפה עצמה ברוב המקרים תיהיה מהירה יותר מפונקציה שאתם תבנו. לכן בדוגמה למעלה הפתרון המהיר ביותר יהיה שימוש פשוט ב-sum ללא צורך בפונקציה כלל או בחיבור המספרים באופן עצמאי.
בנוסף יש לזכור שפקודה xrange מהירה יותר מrange מכיוון שבונה object של generator בשיטה lazy. לכן משתמשים ב-range רק כאשר אנחנו באמת צריכים list בפייתון 3 ביטלו את range של פייתון 2 ומעכשיו ה-range של 3 מבצע מה ש-xrange של -2 היה מבצע.
נקודה נוספת שחשוב לזכור, שפת C הרבה יותר מהירה משפת פייתון או כל שפה אחרת, כך שאם אתם בונים קטע קוד שיבצע חישוב כבד מאוד מומלץ לייצא אותו ל-C ופשוט להשתמש בקוד הזה בתוך פייתון באמצעות המודול ctypes והפקודות הבאות:
להורדת ה-dll מהקוד הקודם לחץ כאן
טרם נמשיך במאמר ברצוננו לארוך תחרות מעניינות!
חוקי התחרות:
- נקודת המוצא שלכם במשימה הינה רשימה המכילה את כל המספרים מ-1 ועד 1,000,000,000 (1 מיליארד ) ועליכם לבנות תוכנה שתחשב את סכום המספרים תוך כדי התיחסות לרשימה!
- את התוכנה אנו נריץ במכונה וירטואלית מסוג Debian, 4 מעבדים 4,096 זיכרון וללא כרטיס רשת.
- יש להשתמש בספריות סטנדרטיות בלבד (אין להשתמש ב-pip להתקנה).
- שימו לב, אין אינטרנט במכונה ולכן את החישוב יש לבצע על המכונה עצמה! לא להשתמש בפעולות RPC.
- בראש כל פרויקט יש לרשום באיזה פייתון כתבתם את הקוד שלכם בצורה הבאה בהתאמה:
#!/usr/bin/python2
#!/usr/bin/python3
פרסים:
משתתפים שהינם תלמידי הקורסים יקבלו:- מקום ראשון ייקבל 300 שקלים
- מקום שני ייקבל 200 שקלים
- מקום ראשון ייקבל קורס לבחירותו במתנה
- מקום שני ייקבל קורס לבחירתו ב-100 שקלים