logo

מה זה הקלדת ברווז ב-Python?

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

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

נדון במה בדיוק המשמעות של Duck Typing בתכנות Python.

Python עוקב אחר ה EAFP (קל יותר לבקש סליחה מאשר רשות) ולא LBLY פילוסופיה (הסתכל לפני שאתה מזנק). ה-EAFP מקושר במידה מסוימת לסגנון 'הקלדת ברווז'.

הקלדה דינמית לעומת סטטית

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

דוגמא -

 x = 12000 print(type(x)) x = 'Dynamic Typing' print(type(x)) x = [1, 2, 3, 4] print(type(x)) 

תְפוּקָה:

תו ל-int ב-java
 

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

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

דוגמא -

 # integer value assigning in JavaScript var a = 10 # Assinging string in swift a = 'Swift language' 

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

מספר שלם כפול ג'אווה

מושג הקלדת ברווז

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

דוגמא -

 class VisualStudio: def execute(self): print('Compiling') print('Running') print('Spell Check') print('Convention Check') class Desktop: def code(self, ide): ide.execute() ide = VisualStudio() desk = Desktop() desk.code(ide) 

תְפוּקָה:

 Compiling Running Spell Check Convention Check 

בקוד לעיל, יצרנו א סטודיו חזותי כיתה שחייבת לבצע() שיטה. ב-desktop-class, העברנו את ה-ide כארגומנט בקוד(). א זה הולך הוא אובייקט של סטודיו חזותי מעמד. בעזרת ide, התקשרנו ל- לבצע() שיטה של ​​מחלקה VisualStudio.

בואו נראה דוגמה נוספת.

דוגמה - 2

 class Duck: def swim(self): print('I'm a duck, and I can swim.') class Sparrow: def swim(self): print('I'm a sparrow, and I can swim.') class Crocodile: def swim_walk(self): print('I'm a Crocodile, and I can swim, but not quack.') def duck_testing(animal): animal.swim() duck_testing(Duck()) duck_testing(Sparrow()) duck_testing(Crocodile()) 

תְפוּקָה:

np.unique
 I'm a duck, and I can swim. I'm a sparrow, and I can swim. Traceback (most recent call last): File '', line 24, in File '', line 19, in duck_testing AttributeError: 'Crocodile' object has no attribute 'swim' 

בקוד לעיל, המופע של מחלקת Duck משתקף בקריאה בדיקת הברווז פוּנקצִיָה. זה קורה גם עם מחלקה Sparrow, המיישמת את לשחות() פוּנקצִיָה. אבל במקרה של מחלקת התנינים, היא נכשלת בהערכת בדיקת הברווז מכיוון שהיא לא מיישמת את לשחות() פוּנקצִיָה.

כיצד הקלדת ברווז תומכת ב-EAFP

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

כאשר אנו רואים הרבה בלוקים של if-else, אז זה סגנון קידוד LBYL.

אבל אם אנחנו רואים הרבה נסיונות מלבד בלוקים, סביר להניח שקודן EAFP.