Type Annotations - שאלות

תגיות:

היי,

אולי יש משהו שאני מפספס, לא הצלחתי למצוא תשובות.

  1. האם יש דרך לכתוב Type Annotation שמגדירה ש-*args יהיה Tuple שמתחיל ב-str ולאחר מכן ממשיך לעוד n איברים שהם Any? (למעשה - הבנייה מסודרת של הארגומנטים שלא דורשת ממני לציין איבר איבר / הרבה איברים מאותו סוג [שימוש ב- ״…״])
  2. כשכותבים Type Annotation לפונקציה רקורסיבית שמחזירה קריאה נוספת לאותה הפונקציה (כדוגמת fibo בקולונל האטי שמחזירה את fibo(n-1)), למרות שתנאי העצירה מגדיר שהפונקציה מחזירה ערך מסויים (למשל, int במקרה שלנו), ההרצה ב-mypy לא מבינה את זה וחושבת שמדובר ב-Any, כי החזרתי קריאה לפונקציה. יש דרך להתגבר על המכשול?

תודה רבה לעוזרים!

  1. אי אפשר (לדעתי) לעשות אנוטציה לכמות בלתי סופית של איברים ב־Tuple לא הומוגני. או שתחליט שהוא יהיה הומוגני, או שתחליט שאתה יודע את כמות הפריטים שבו. אם יש לך רק איבר ראשון שהוא str, שקול להוציא אותו למשתנה נפרד.
  2. אתה בטוח שהיא מחזירה את הקריאה לפונקציה? קצת מוזר. נשמע שהיא מחזירה את הערך שחוזר מהקריאה לפונקציה הזו (ככה"נ int במקרה של פיבונאצ’י).

תודה על התשובה!
הנה מה שהיא מחזירה במקרה של פיבונאצ׳י:

אנסח מחדש:
ב-fibo ערך ההחזרה הוא int, אבל בפועל מה שכתוב שם זה fibo(n-1) + fibo(n-2). משום מה הוא לא מזהה אותו כ-int.

בסדר… כביכול פתרתי. הסיבה שזה קרה היא שהגדרתי את פונקציית ה-cache שלי כ-Callable[…, Any].
ניסיתי כביכול למצוא פתרון שהוא גנרי, להפוך את הפקודה הזו לכזו שתעבוד על כל סוג של טיפוס, אבל זה מגביל לי את הפונקצייה אז שיניתי למשהו טיפה יותר ספציפי.

תודה בכל מקרה!