0Pricing
Python Academy · درس

تعبيرات المُولّد

اكتب مسارات معالجة كسولة ومختصرة

تعبيرات المُولّد درس مجاني في Python Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Python Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Python Academy 4 دروس في المجموع.

من فهم القوائم إلى تعبير مولّد

يشبه تعبير المولّد فهم القوائم، لكنه يستخدم الأقواس المستديرة بدلًا من الأقواس المربعة. وينتج القيم بطريقة كسولة بدلًا من إنشاء قائمة كاملة.

list_comp = [x * x for x in range(5)]
gen_expr = (x * x for x in range(5))
print(list_comp)
print(gen_expr)
print(list(gen_expr))

الفرق في الذاكرة

يخصّص فهم القوائم مساحة لكل عنصر مسبقًا. أما تعبير المولّد فلا يحتفظ تقريبًا بأي شيء حتى تطلبوا القيم. قارنوا بين حجميهما.

import sys
lst = [x for x in range(10000)]
gen = (x for x in range(10000))
print('list bytes:', sys.getsizeof(lst))
print('gen bytes:', sys.getsizeof(gen))

التكرار على تعبير مولّد

تستهلكون تعبير المولّد مثل أي مكرّر: باستخدام حلقة for أو next() أو بتمريره إلى دالة.

gen = (c.upper() for c in 'hello')
for ch in gen:
    print(ch)

التصفية باستخدام if

أضيفوا عبارة if للاحتفاظ بالعناصر المطابقة فقط، تمامًا كما في فهم القوائم.

evens = (n for n in range(10) if n % 2 == 0)
print(list(evens))

التمرير مباشرةً إلى الدوال

عندما يكون تعبير المولّد الوسيط الوحيد لدالة، يمكنكم حذف الأقواس الإضافية. فهذا أوضح ويتجنب إنشاء قائمة مؤقتة.

total = sum(x * x for x in range(5))
print(total)
biggest = max(len(w) for w in ['a', 'abc', 'ab'])
print(biggest)

تذكير بالاستخدام مرة واحدة

يُستنفد تعبير المولّد بعد مرور واحد، تمامًا مثل الدالة المولّدة. ولا ينتج التكرار الثاني أي شيء.

gen = (x for x in range(3))
print(list(gen))
print(list(gen))

تسلسل التعبيرات

يمكنكم تمرير تعبير مولّد إلى تعبير مولّد آخر لإنشاء مسار كسول. ولا يُحسَب أي شيء حتى يسحب المستهلك النهائي القيم.

nums = (n for n in range(10))
evens = (n for n in nums if n % 2 == 0)
doubled = (n * 2 for n in evens)
print(list(doubled))

any() و all()

تتألق تعبيرات المولّدات مع any() وall() لأنها تستطيع التوقف المبكر، فتتوقف بمجرد معرفة الإجابة.

words = ['cat', 'dog', 'elephant']
print(any(len(w) > 5 for w in words))
print(all(len(w) >= 3 for w in words))

الحلقات المتداخلة

مثل فهم القوائم، تدعم تعبيرات المولّدات عدة عبارات for، وتُقرأ من اليسار إلى اليمين.

pairs = ((x, y) for x in range(2) for y in range(2))
print(list(pairs))

مثال على مسار كسول

إليكم مسارًا صغيرًا لمعالجة النصوص. كل مرحلة فيه كسولة، لذا يمكن بث ملف ضخم من دون تحميله كاملًا.

lines = ['  alpha ', '', '  beta', 'gamma  ']
stripped = (line.strip() for line in lines)
nonempty = (line for line in stripped if line)
print(list(nonempty))

متى تختارون كل نوع؟

استخدموا فهم القوائم عندما تحتاجون إلى البيانات عدة مرات أو إلى الفهرسة. واستخدموا تعبير المولّد للبث ذي المرور الواحد أو للبيانات الكبيرة.

data = range(6)
as_list = [x + 1 for x in data]
print(as_list[0], as_list[-1])
total = sum(x + 1 for x in data)
print(total)

اختبار سريع

اختبروا مدى فهمكم لتعبيرات المولّدات.

مراجعة

لقد تعلمتم تعبيرات المولّدات:

  • استخدموا الأقواس المستديرة كبديل كسول لفهم القوائم.
  • توفّر الذاكرة وتدعم مرشحات if والحلقات المتداخلة.
  • تتوافق جيدًا مع sum وany وall وتسلسل المولّدات.
  • هي أحادية الاستخدام.

التالي: تركيب المولّدات باستخدام yield from.

الأسئلة الشائعة

هل درس «تعبيرات المُولّد» مجاني؟

نعم — نص درس «تعبيرات المُولّد» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Python Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Python Academy 4 دروس في المجموع.

ماذا ستتعلم في «تعبيرات المُولّد»؟

اكتب مسارات معالجة كسولة ومختصرة تتمرن على Python Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Python Academy؟

لا تُشترط خبرة سابقة. Python Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «تعبيرات المُولّد»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Python Academy هذا؟

نعم. كل درس في Python Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. بروتوكول المكرّر
  2. دوال المُولّد
  3. تعبيرات المُولّد
  4. yield from والتفويض
← العودة إلى Python Academy