جوزيه: مرحبًا بك مرة أخرى.
في هذه المحاضرة نتحدث عن التصفية.
الآن بعد أن حصلنا على المولدات
والمكررات والمتكررات الخاصة بنا ، يمكننا
أن نبدأ ببعض الوظائف المدمجة الممتعة.
وظيفة التصفية هي وظيفة مضمنة
في Python يمكنك الاتصال بها من أي ملف أو برنامج
، وهذا ما يعنيه مضمّن ويستغرق
وسيطتين.
الوسيطة الأولى لوظيفة التصفية
هي دالة أخرى وهي
أيضًا قابلة للتكرار.
إذاً الأمر كهذا ، فلنبحث
عن قائمة أصدقاء مثل
رولف ، جوزيه ، راندي ، آنا وماري وأنا أعلم أنني فاتني أحدهم.
والآن سنستخدم وظيفة
التصفية حتى نحصل فقط على الأصدقاء الذين
يبدأون بالحرف R.
لذا ، ابدأ بـ R ، سيكون عامل التصفية
، هذه هي الوظيفة ، الآن تأخذ الوسيطة
الأولى للدالة ، arg 1
، الدالة التي ترجع صوابًا أو خطأً.
لذا يجب أن تكون الوسيطة الأولى لوظيفة
التصفية هذه دالة أخرى ترجع صواب أو خطأ اعتمادًا
على ما نريد تصفيته.
لذا اسمحوا لي أن أحدد وظيفة هنا.
يبدأ بـ R.
عودة الصديق نقطة تبدأ بـ R.
ستكون نقطة الصديق التي تبدأ بحرف R صحيحة
إذا بدأت هذه الحجة هنا بحرف R ، فستكون خاطئة
إذا لم تكن كذلك.
لذلك ، يجب أن تكون الحجة الأولى لوظيفة التصفية
هي هذه تبدأ بوظيفة
R ويجب أن تكون الوسيطة الثانية
قابلة للتكرار ، فنحن نعرف ما هؤلاء حتى
الأصدقاء متكررون لأننا نستطيع التكرار
عليها ، إنها قائمة وهذه قائمة
هذا هو الشكل الذي تبدو عليه وظيفة التصفية وما
تفعله هو أنها تحافظ فقط على العناصر التي
يعود ذلك إلى صحتها.
لذا ، في المرة الأولى التي يتم
فيها تشغيل وظيفة التصفية ، ستمنحك رولف ، رولف الذهاب
إلى الأصدقاء ، يبدأ الصديق بـ R
سيكون صحيحًا ، لذا سيتم الاحتفاظ
بـ Rolf بواسطة وظيفة التصفية.
ثم ستعود مرة أخرى ، وهذه المرة مع Jose ،
يبدأ Jose بحرف R خطأ ، لذا فإن الفلتر
سيزيله ويتجاهله وهكذا دواليك
لكل صديق هنا.
الشيء المثير للاهتمام هو أن
المرشح يقوم فعليًا بإرجاع
مولد بحيث يكون أكثر
فاعلية ، بدلاً من نسخ
قائمتك بالعناصر التي تريد الاحتفاظ
بها فقط ، عليك الاتصال بالآتي ، وابدأ بالعنصر R حتى تحصل على العنصر
التالي المتاح العنصر الذي هو في هذه الحالة سيكون رولف.
وإذا قمت بذلك مرارًا وتكرارًا ، فستحصل
على Randy وأخيراً
ستحصل على استثناء إيقاف التكرار الذي تحدثنا عنه
سابقًا ، وهو ما
يشير إلى نهاية تسلسل أو مولد أو
مكرر عندما تصل إلى
نهايتها ، اتفقنا؟
عندما تقوم بعمل حلقة for
، فإن ما تفعله الحلقة for
في الخلفية هو مجرد الاتصال التالي وبمجرد
أن تصل إلى هذا التوقف عن التكرار
، تتوقف الحلقة for ولا
تعطيك هذا الخطأ لأن إيقاف التكرار
قد تم تصميمه ليعني ذلك والحلقة for
هي بناء يستخدم إيقاف التكرار لمعرفة متى
وصل إلى النهاية ، حسنًا؟
الآن بالطبع ، إذا قمت بعمل قائمة تبدأ بـ R ، فستقدم
لك قائمة بجميع العناصر
في المولد ، وسوف
تمر عبر كل عنصر وستضعه في قائمة
جديدة.
الآن إذا قمت بذلك مرة أخرى ،
ماذا تعتقد أنه سيحدث؟
حسنًا ، ستحصل على قائمة فارغة
، لا يقوم كائن القائمة هنا بإثارة إيقاف التكرار ولكنه يرى
أن تكرار الإيقاف قد تم رفعه ولا
يمنحك أي شيء ، بل يمنحك
قائمة فارغة الآن لأن المولد
تم استخدامه بالفعل ويتذكر أنه
وصل إلى النهاية ، لذا لا يمكنه منحك
أي شيء آخر.
هذا هو السبب في أنني أشرح المولدات والمكررات
والمتكررات قبل الدخول في وظيفة المرشح ، حسنًا؟
الآن ، بالطبع ، بدلاً من تحديد دالة هنا
تأخذ معلمة وإرجاع
المعلمة تبدأ بـ R ، يمكننا فقط
استخدام lamda.
وظيفة lamda هذه هي نفس الشيء
تمامًا ، لذا فهي تأخذ معلمة
واحدة وبعد النقطتين نحدد ما تعيده وما
ترجع إليه هو x dot يبدأ بـ R لذلك هذا إما صحيح
أو خطأ اعتمادًا على ما
إذا كان x يبدأ بـ R.
إذا كان ذلك يجعلك تشعر بتحسن ، فيمكنك
الاتصال بصديق المعلمة وبهذه الطريقة ربما
يكون من الواضح بعض الشيء
أن هذه الوظيفة ستعمل على هؤلاء
الأصدقاء هنا ، فلن تحتاج
بعد الآن إلى هذه الوظيفة هناك.
كما أننا لم نعد بحاجة إلى هذا التعليق
لأننا نعرف ما يعنيه الآن.
وظيفة المرشح هنا مطابقة
لتعبير المولد
هذا هنا ، فهم هذا المولد
الذي يقول ، F لـ F في الأصدقاء
، إذا بدأت F نقطة بـ R.
إذن هذان الاثنان متطابقان ، حسنًا؟
هنا لدينا تعبير مولد ، فهم
منشئ يضع كل صديق في مولد جديد
ولكن فقط إذا بدأت F بالحرف R ، فهذان الاثنان
متماثلان ، حسنًا؟
أيهما أسرع؟
أيهما يعمل بشكل أفضل؟
هذا ، المولد الفهم يعمل بشكل أفضل في
هذه الحالة ، على الأقل.
والسبب في ذلك هو أنه
يتعين عليك إنشاء وظيفة lamda في هذا المرشح
ولا يتعين عليك إنشاء وظيفة
lamda في تعبير المولد.
إذا كنت قد حددت وظيفتك بالفعل في مكان
آخر في برنامجك ، فيمكن لوظيفة
المرشح أن تعمل بشكل أفضل وأيضًا في بعض الحالات
، أعتقد أن وظيفة المرشح يمكن
أن تكون أكثر قابلية للقراءة على الرغم من أنه في العديد من الحالات
الأخرى ، أعتقد أن فهم القائمة
يكون أكثر قابلية للقراءة.
لذا فالأمر متروك لك في اختيار
الشخص الذي تستخدمه ، وعادة ما أختار الفهم ، وهو أيضًا
لغة Pythonic أكثر قليلاً.
وبالمناسبة ، فقط من أجل الاكتمال
، من الواضح تمامًا ما يحدث ، هذين
الفلترين وفهم المولد هذا متطابقان
مع هذه الوظيفة الأخرى التي سأقوم
بتعريفها.
إنها وظيفة مرشح أخرى
، تشبه إلى حد
كبير هذه الوظيفة التي تأخذ وظيفة
وقابلة للتكرار وستقوم بالتكرار على ما هو متكرر
، وستتحقق مما إذا كانت الوظيفة ترجع
صحيحًا أم لا وستحصل على I في النهاية
إذا كانت الوظيفة صحيح.
لذا ، دعنا نتخيل أننا نسمي الفلتر المخصص الخاص بي هنا.
يبدأ صديق لامدا بالحرف R وهذه الوظيفة
، والمتكررة هي قائمة أصدقائنا.
نحن نكرر ما هو قابل للتكرار ، نحصل على العنصر الأول
وهو رولف.
إذا كانت func I أي ، الصديق الذي يبدأ بـ
R صحيحًا ، وهو كذلك ، فسنخضع
أنا ، هذا هو Rolf.
عندما نطلق على هذه الدالة بعد ذلك
، سنحصل على Rolf ثم نتوقف
بعد السطر التاسع.
عندما ندعو التالي
مرة أخرى ، سنعود إلى الأعلى ، هذا
أنا ، هذا هو خوسيه بالمناسبة ، سلسلة
خوسيه ، سنتحقق
مما إذا كانت الدالة متطابقة ، ستكون
خاطئة ، لذا لن نتوصل إلى أي شيء ، لن نتوقف ، ننتقل
إلى العنصر التالي من الحلقة ، ونتحقق
مما إذا كان راندي يبدأ بـ R وهو كذلك
، إذن ، ثم نعطي راندي ونتوقف.
في المرة القادمة التي نتصل فيها بعد
ذلك ، نذهب إلى هنا وهي آنا ، إنها خاطئة ، لذلك لا نستسلم
، نستمر ، أنا ماري ، إنها خاطئة ، لذا لا
نستسلم ، نستمر ، نصل إلى النهاية ، هذا هو أوقف
التكرار حتى نصل إلى نهاية كائن المولد وهذا
تكرار توقف آخر يخبرنا أننا وصلنا إلى
النهاية.
لذلك نأمل أن يكون هذا منطقيًا
، فقد بدأت في الحصول على المزيد والمزيد
حول ما تدور حوله Python وهو إدارة البيانات
وإرسال البيانات من مكان إلى آخر
والعائد قوي للغاية
لأنه يتيح لك التوقف وإنشاء
القيم واحدًا تلو الآخر دون الحاجة إلى تخزينها
جميعًا في الذاكرة في نفس الوقت.
على أي حال ، هذا كل شيء بالنسبة
لهذا الفيديو ، أردت فقط أن أوضح لك وظيفة الفلتر هذه
وكيف يتم استخدامها.
وظيفة التصفية موجودة
أيضًا في العديد من لغات
البرمجة الأخرى ، لذا ستراها في
كل مكان بينما تطور مهاراتك في البرمجة
وتستمر في رحلة البرمجة.
حسنًا ، هذا كل شيء وسأراكم
في الفيديو التالي.