<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>מבני נתונים ופונקציות on kodkod | מבואות קודקוד</title><link>https://intro-kodkod-6.nm-ambition.com/docs/python-data-functions/</link><description>Recent content in מבני נתונים ופונקציות on kodkod | מבואות קודקוד</description><generator>Hugo</generator><language>he</language><copyright>מבואות קודקוד</copyright><atom:link href="https://intro-kodkod-6.nm-ambition.com/docs/python-data-functions/index.xml" rel="self" type="application/rss+xml"/><item><title>list — רשימה: יצירה, גישה, הוספה, מחיקה, חיפוש ומעבר</title><link>https://intro-kodkod-6.nm-ambition.com/docs/python-data-functions/01-list/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://intro-kodkod-6.nm-ambition.com/docs/python-data-functions/01-list/</guid><description>&lt;h2 id="מה-נלמד"&gt;מה נלמד?&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;list&lt;/strong&gt; (רשימה) היא מבנה הנתונים הנפוץ ביותר ב-Python. כבר השתמשנו בה בקצרה. היום נלמד אותה כמו שצריך:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;יצירה וגישה לאיברים.&lt;/li&gt;
&lt;li&gt;הוספה, מחיקה ושינוי.&lt;/li&gt;
&lt;li&gt;חיפוש.&lt;/li&gt;
&lt;li&gt;מעבר בלולאה ומיון.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="למה-צריך-את-זה"&gt;למה צריך את זה?&lt;/h2&gt;
&lt;p&gt;כמעט כל תוכנה מחזיקה &lt;strong&gt;אוספים&lt;/strong&gt;: רשימת סטודנטים, מוצרים בעגלה, הזמנות של היום, שורות מקובץ, תוצאות משאילתת Database (נושא Backend ומסדי נתונים). כשהמספר לא ידוע מראש, אי אפשר להחזיק משתנה נפרד לכל פריט (&lt;code&gt;student1&lt;/code&gt;, &lt;code&gt;student2&lt;/code&gt;&amp;hellip;). רשימה מחזיקה &lt;strong&gt;כמה שצריך&lt;/strong&gt;, בסדר מסוים.&lt;/p&gt;</description></item><item><title>tuple ו-set — רשומה קבועה ואוסף בלי כפילויות</title><link>https://intro-kodkod-6.nm-ambition.com/docs/python-data-functions/02-tuple-and-set/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://intro-kodkod-6.nm-ambition.com/docs/python-data-functions/02-tuple-and-set/</guid><description>&lt;h2 id="מה-נלמד"&gt;מה נלמד?&lt;/h2&gt;
&lt;p&gt;שני מבני נתונים נוספים, כל אחד עם &amp;ldquo;כוח-על&amp;rdquo; משלו:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;tuple&lt;/strong&gt; — כמו רשימה, אבל &lt;strong&gt;קבוע&lt;/strong&gt;: אי אפשר לשנות אותו אחרי היצירה.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;set&lt;/strong&gt; — אוסף &lt;strong&gt;בלי כפילויות&lt;/strong&gt; ובלי סדר, שמאפשר בדיקה מהירה מאוד אם ערך קיים בו.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="למה-צריך-את-זה"&gt;למה צריך את זה?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;tuple&lt;/strong&gt; מתאים לנתונים שמייצגים &lt;strong&gt;רשומה אחת עם מבנה קבוע&lt;/strong&gt;: נקודה &lt;code&gt;(x, y)&lt;/code&gt;, תאריך &lt;code&gt;(2026, 10, 6)&lt;/code&gt;, שורה מ-Database &lt;code&gt;(7, &amp;quot;Dana&amp;quot;, 24)&lt;/code&gt;. בנושא Backend ומסדי נתונים, &lt;strong&gt;כל שורה שתחזור מה-Database תגיע כ-tuple!&lt;/strong&gt; הקביעות מבטיחה שאף קוד לא ישנה &amp;ldquo;בטעות&amp;rdquo; רשומה.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;set&lt;/strong&gt; מתאים כשרוצים &lt;strong&gt;ייחודיות&lt;/strong&gt;: כמה משתמשים &lt;strong&gt;שונים&lt;/strong&gt; ביקרו באתר היום? אילו תגיות יש לפוסט? מי רשום לשני קורסים גם יחד?&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="הסבר-מהבסיס"&gt;הסבר מהבסיס&lt;/h2&gt;
&lt;h3 id="tuple"&gt;tuple&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;tuple&lt;/strong&gt; הוא רצף &lt;strong&gt;מסודר&lt;/strong&gt; של ערכים, &lt;strong&gt;שלא ניתן לשינוי&lt;/strong&gt; (Immutable). אחרי שנוצר, אי אפשר להוסיף, למחוק או להחליף איברים.&lt;/p&gt;</description></item><item><title>dict — מילון: מפתח וערך</title><link>https://intro-kodkod-6.nm-ambition.com/docs/python-data-functions/03-dict/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://intro-kodkod-6.nm-ambition.com/docs/python-data-functions/03-dict/</guid><description>&lt;h2 id="מה-נלמד"&gt;מה נלמד?&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;dict&lt;/strong&gt; (Dictionary, מילון) הוא מבנה שמחזיק &lt;strong&gt;זוגות של מפתח וערך&lt;/strong&gt;. במקום לגשת לפי מיקום (&lt;code&gt;[0]&lt;/code&gt;), ניגשים לפי &lt;strong&gt;שם&lt;/strong&gt; (&lt;code&gt;[&amp;quot;name&amp;quot;]&lt;/code&gt;).&lt;/p&gt;</description></item><item><title>Slicing, Mutable מול Immutable, ו-is מול ==</title><link>https://intro-kodkod-6.nm-ambition.com/docs/python-data-functions/04-slicing-mutability-identity/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://intro-kodkod-6.nm-ambition.com/docs/python-data-functions/04-slicing-mutability-identity/</guid><description>&lt;h2 id="מה-נלמד"&gt;מה נלמד?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Slicing&lt;/strong&gt; — איך חותכים חלק מרשימה, tuple או מחרוזת.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mutable&lt;/strong&gt; מול &lt;strong&gt;Immutable&lt;/strong&gt; — מה ניתן לשינוי ומה לא, ולמה זה משנה.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;הפניות&lt;/strong&gt; (References) — מה קורה כשכותבים &lt;code&gt;b = a&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;is&lt;/code&gt; מול &lt;code&gt;==&lt;/code&gt;&lt;/strong&gt; — &amp;ldquo;אותו ערך&amp;rdquo; מול &amp;ldquo;אותו אובייקט בדיוק&amp;rdquo;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="למה-צריך-את-זה"&gt;למה צריך את זה?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Slicing&lt;/strong&gt; נמצא בכל מקום: 10 התוצאות הראשונות, 3 התווים האחרונים של מספר כרטיס (&lt;code&gt;****1234&lt;/code&gt;), &amp;ldquo;עמוד 2&amp;rdquo; של רשימה.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mutable&lt;/strong&gt; הוא מקור לאחד הבאגים המבלבלים ביותר ב-Python: &amp;ldquo;שיניתי רשימה אחת, ופתאום השתנתה גם השנייה!&amp;rdquo;. הבנה של הנושא הזה מונעת שעות של דיבאג. ובנושא OOP, אובייקטים של מחלקות מתנהגים בדיוק כך.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="הסבר-מהבסיס"&gt;הסבר מהבסיס&lt;/h2&gt;
&lt;h3 id="slicing"&gt;Slicing&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Slicing&lt;/strong&gt; (חיתוך) יוצר &lt;strong&gt;רצף חדש&lt;/strong&gt; מחלק של רצף קיים:&lt;/p&gt;</description></item><item><title>פונקציות לעומק: ערכי ברירת מחדל, Functions as Objects, ‎*args, ‎**kwargs ו-Lambda</title><link>https://intro-kodkod-6.nm-ambition.com/docs/python-data-functions/05-functions-args-kwargs-lambda/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://intro-kodkod-6.nm-ambition.com/docs/python-data-functions/05-functions-args-kwargs-lambda/</guid><description>&lt;h2 id="מה-נלמד"&gt;מה נלמד?&lt;/h2&gt;
&lt;p&gt;בנושא Python מקצועי, קוד נקי ו-Debugging למדנו את הבסיס: &lt;code&gt;def&lt;/code&gt;, פרמטרים, &lt;code&gt;return&lt;/code&gt;. היום נלמד כמה יכולות שהופכות פונקציות לגמישות הרבה יותר:&lt;/p&gt;</description></item><item><title>Scope — Local, Enclosing, Global ו-Built-in (LEGB)</title><link>https://intro-kodkod-6.nm-ambition.com/docs/python-data-functions/06-scope-legb/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://intro-kodkod-6.nm-ambition.com/docs/python-data-functions/06-scope-legb/</guid><description>&lt;h2 id="מה-נלמד"&gt;מה נלמד?&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Scope&lt;/strong&gt; (טווח הכרה) = &lt;strong&gt;האזור בקוד שבו שם (משתנה או פונקציה) מוכר&lt;/strong&gt;. נלמד:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Local&lt;/strong&gt; — משתנים בתוך פונקציה.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enclosing&lt;/strong&gt; — משתנים של פונקציה חיצונית, כשיש פונקציה בתוך פונקציה.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Global&lt;/strong&gt; — משתנים ברמה הראשית של הקובץ.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Built-in&lt;/strong&gt; — שמות מובנים של Python (&lt;code&gt;print&lt;/code&gt;, &lt;code&gt;len&lt;/code&gt;&amp;hellip;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LEGB&lt;/strong&gt; — הסדר שבו Python מחפשת שם.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="למה-צריך-את-זה"&gt;למה צריך את זה?&lt;/h2&gt;
&lt;p&gt;אם כל משתנה היה נגיש מכל מקום, משתנה בשם &lt;code&gt;total&lt;/code&gt; בפונקציה אחת היה דורס משתנה &lt;code&gt;total&lt;/code&gt; בפונקציה אחרת, ובתוכנה של 10,000 שורות זה כאוס. Scope &lt;strong&gt;מבודד&lt;/strong&gt; כל פונקציה: היא יכולה להשתמש בשמות שלה בלי לחשוש מהתנגשויות.&lt;/p&gt;</description></item><item><title>Pure Functions — פונקציות טהורות ו-Side Effects</title><link>https://intro-kodkod-6.nm-ambition.com/docs/python-data-functions/07-pure-functions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://intro-kodkod-6.nm-ambition.com/docs/python-data-functions/07-pure-functions/</guid><description>&lt;h2 id="מה-נלמד"&gt;מה נלמד?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;מה זו &lt;strong&gt;Pure Function&lt;/strong&gt; (פונקציה טהורה).&lt;/li&gt;
&lt;li&gt;מה זה &lt;strong&gt;Side Effect&lt;/strong&gt; (תופעת לוואי) — ואילו סוגים קיימים.&lt;/li&gt;
&lt;li&gt;המלכודת של &lt;strong&gt;שינוי רשימה שהתקבלה כפרמטר&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;איך כותבים &lt;strong&gt;גרסה טהורה&lt;/strong&gt; של פונקציה.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="למה-צריך-את-זה"&gt;למה צריך את זה?&lt;/h2&gt;
&lt;p&gt;הנה פונקציה שנראית תמימה:&lt;/p&gt;</description></item><item><title>Higher-Order Functions — פונקציות שמקבלות ומחזירות פונקציות</title><link>https://intro-kodkod-6.nm-ambition.com/docs/python-data-functions/08-higher-order-functions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://intro-kodkod-6.nm-ambition.com/docs/python-data-functions/08-higher-order-functions/</guid><description>&lt;h2 id="מה-נלמד"&gt;מה נלמד?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;מה זו &lt;strong&gt;Higher-Order Function&lt;/strong&gt; (פונקציה מסדר גבוה).&lt;/li&gt;
&lt;li&gt;איך &lt;strong&gt;מעבירים פונקציה כפרמטר&lt;/strong&gt; — ולמה בלי סוגריים.&lt;/li&gt;
&lt;li&gt;הפונקציות המובנות &lt;strong&gt;&lt;code&gt;map&lt;/code&gt;&lt;/strong&gt; ו-&lt;strong&gt;&lt;code&gt;filter&lt;/code&gt;&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;הפרמטר &lt;strong&gt;&lt;code&gt;key&lt;/code&gt;&lt;/strong&gt; של &lt;code&gt;sorted&lt;/code&gt;, &lt;code&gt;max&lt;/code&gt; ו-&lt;code&gt;min&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;פונקציה שמחזירה פונקציה&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="למה-צריך-את-זה"&gt;למה צריך את זה?&lt;/h2&gt;
&lt;p&gt;שתי פונקציות כמעט זהות:&lt;/p&gt;</description></item><item><title>Nested Functions, Closures ו-nonlocal</title><link>https://intro-kodkod-6.nm-ambition.com/docs/python-data-functions/09-nested-functions-nonlocal/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://intro-kodkod-6.nm-ambition.com/docs/python-data-functions/09-nested-functions-nonlocal/</guid><description>&lt;h2 id="מה-נלמד"&gt;מה נלמד?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Nested Function&lt;/strong&gt; — פונקציה שמוגדרת בתוך פונקציה.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enclosing&lt;/strong&gt; — ה-E של LEGB, מקרוב.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Closure&lt;/strong&gt; — פונקציה ש&amp;quot;זוכרת&amp;quot; משתנים.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;nonlocal&lt;/code&gt;&lt;/strong&gt; — איך משנים משתנה של הפונקציה העוטפת.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="למה-צריך-את-זה"&gt;למה צריך את זה?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;פונקציית עזר פרטית:&lt;/strong&gt; לפעמים פונקציה צריכה פונקציית עזר קטנה ששייכת &lt;strong&gt;רק&lt;/strong&gt; לה. אין סיבה שהיא תהיה גלובלית ותתערבב עם שאר הקוד.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;פונקציות שזוכרות מצב:&lt;/strong&gt; בשיעור הקודם ראינו ש-&lt;code&gt;make_multiplier(2)&lt;/code&gt; מחזירה פונקציה ש&amp;quot;זוכרת&amp;quot; את המספר 2. היום נבין איך זה עובד — ואיך בונים מונה, מצבר או מטמון &lt;strong&gt;בלי&lt;/strong&gt; &lt;code&gt;global&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="הסבר-מהבסיס"&gt;הסבר מהבסיס&lt;/h2&gt;
&lt;h3 id="פונקציה-בתוך-פונקציה"&gt;פונקציה בתוך פונקציה&lt;/h3&gt;
&lt;p&gt;אפשר להגדיר &lt;code&gt;def&lt;/code&gt; בתוך &lt;code&gt;def&lt;/code&gt;. הפונקציה הפנימית:&lt;/p&gt;</description></item><item><title>Decorators — להוסיף התנהגות לפונקציה בלי לגעת בה</title><link>https://intro-kodkod-6.nm-ambition.com/docs/python-data-functions/10-decorators/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://intro-kodkod-6.nm-ambition.com/docs/python-data-functions/10-decorators/</guid><description>&lt;h2 id="מה-נלמד"&gt;מה נלמד?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;מה זה &lt;strong&gt;Decorator&lt;/strong&gt; (מעטר) ולמה הוא שימושי.&lt;/li&gt;
&lt;li&gt;איך בונים Decorator: פונקציה שמקבלת פונקציה ומחזירה &lt;strong&gt;wrapper&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;התחביר &lt;strong&gt;&lt;code&gt;@&lt;/code&gt;&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;wrapper שמתאים &lt;strong&gt;לכל&lt;/strong&gt; פונקציה, עם &lt;code&gt;*args&lt;/code&gt; ו-&lt;code&gt;**kwargs&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="למה-צריך-את-זה"&gt;למה צריך את זה?&lt;/h2&gt;
&lt;p&gt;רוצים להדפיס הודעה בכל פעם שקוראים לפונקציה — לצורכי דיבאג:&lt;/p&gt;</description></item></channel></rss>