Python __rmatmul __ () שיטת הקסם | פינקסטר

Share on facebook
Share on twitter
Share on linkedin
Share on telegram
Share on whatsapp
Share on email
פרסומת
X-ray_Promo1


תחביר

object.__rmatmul__(self, other)

הפיתון __rmatmul__() השיטה מיישמת את לַהֲפוֹך כפל מטריצות @ פעולה עם אופרנדים משתקפים ומוחלפים. אז, כאשר אתה מתקשר x @ y, פייתון מנסה להתקשר x.__matmul__(y). אם השיטה לא מיושמת, פייתון מנסה להתקשר __rmatmul__ באופראנד הנכון ואם גם זה לא מיושם, זה מעלה א TypeError.

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

כפל רקע מטריקס

בדוגמה הבאה, אתה יוצר מחלקה מותאמת אישית Data ולהחליף את __matmul__() שיטה שפשוט מחזירה מחרוזת דמה. החישוב האמיתי יכול להיות הרבה יותר מתוחכם, כמובן.

class Data:
        
    def __matmul__(self, other):
        return '... my result of matmul...'


a = Data()
b = Data()
c = a @ b

print(c)
# ... my result of matmul...

ה @ מפעיל הוכנס לתחביר הליבה של פייתון מ -3.5 ואילך הודות ל- PEP 465. המטרה היחידה שלה היא לפתור את הבעיה של ריבוי מטריצות. זה אפילו מגיע עם תזכורת נחמדה – @ הוא * עבור מבְּאורז.

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

Python __matmul__ לעומת __rmatmul__

תגיד, אתה רוצה לחשב את @ פעולה על שני אובייקטים מותאמים אישית x ו y:

print(x @ y)

פייתון מנסה קודם כל לקרוא לאובייקט השמאלי __matmul__() שיטה x.__matmul__(y). אבל זה עשוי להיכשל משתי סיבות:

  1. השיטה x.__matmul__() אינו מיושם מלכתחילה, או
  2. השיטה x.__matmul__() מיושם אך מחזיר א NotImplemented ערך המציין כי סוגי הנתונים אינם תואמים.

אם זה נכשל, Python מנסה לתקן את זה על ידי התקשרות ל- y.__rmatmul__() ל כפל מטריקס הפוך באופראנד הנכון y.

אם מיושמת שיטת הכפל המטריצה ​​ההפוכה, Python יודע שהיא לא נתקלת בבעיה פוטנציאלית של פעולה לא-קומוטטיבית. אם זה היה פשוט מבוצע y.__matmul__(x) במקום x.__matmul__(y)התוצאה תהיה שגויה מכיוון שהפעולה עשויה להיות לא-קומוטיבית כאשר היא מוגדרת כפעולה מותאמת אישית. בגלל זה y.__rmatmul__(x) נחוץ.

אז ההבדל בין x.__matmul__(y) ו x.__rmatmul__(y) הוא שהראשון מחשב x @ y ואילו האחרון מחשב y @ x – שניהם קוראים לשיטה המתאימה המוגדרת על האובייקט x.

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

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

class Data_1:
    pass

class Data_2:
    def __rmatmul__(self, other):
        return 'called reverse matmul'


x = Data_1()
y = Data_2()

print(x @ y)
# called reverse matmul

וידיאו קשור

כדי להבין את הפעולה בפירוט, אתה מוזמן לקרוא שוב ההדרכה שלנו או צפו בסרטון הבא:

הפניות:

לאן ללכת מכאן?

מספיק תיאוריה, בואו נעשה קצת תרגול!

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

תרגול פרויקטים הוא איך אתה מחדד את המסור שלך בקידוד!

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

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

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

הצטרף עכשיו לוובינר החינמי!

.



קישור לכתבת המקור – 2021-10-16 13:55:26

Share on facebook
Facebook
Share on twitter
Twitter
Share on linkedin
LinkedIn
Share on telegram
Telegram
Share on whatsapp
WhatsApp
Share on email
Email
פרסומת
X-ray_Promo1

עוד מתחומי האתר