functools

Updated: May 7, 2019

הספריה functools

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

import operator,functools lista=[1,2,3,4,5] f=operator.mul print(functools.reduce(f,lista))

>>>

120

בדוגמא למעלה יצרנו פונקציה המכפילה שני איברים באמצעות המתודה mul המיובאת מהספריה operator אשר ניתן לקרוא אודותיה בהרחבה במדריך, ולקחנו רשימה פשוטה של המספרים 1-5 כעת מבצעים reduce (שהיא מתודה בספריה functools) שתכפיל את 1 ו- 2 לאחר מכן את התוצאה (2) ב- 3, לאחר מכן את התוצאה(6) ב- 4 , לאחר מכן את התוצאה (24) ב- 5 ובסוף מקבלים 120. בעצם בנינו מנגנון לחישוב עצרת!.


מתודה שימושית נוספת בספריית functools אודותיה כתבנו פוסט נפרד בשם memoization נקראת lru_cache והיא מסייעת בהאצת תוכניות עם פונקציות רקוסיביות מורכבות. תחפשו את הפוסט בבלוג ותקראו שם.

0 views