0Pricing
Python Academy · درس

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

أنشئ تسلسلات كسولة باستخدام تعبيرات المولّدات لتحسين كفاءة الذاكرة

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

مقدمة

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

صياغة تعبير المولّد

تستخدم (expression for item in iterable) الأقواس. وتعيد كائن مولّد، وليس قائمة.
gen = (x**2 for x in range(5))
print(gen)  # generator object
print(next(gen))  # 0
print(next(gen))  # 1

كفاءة الذاكرة

يحتفظ المولّد بقيمة واحدة فقط في كل مرة. ويستخدم sum(x**2 for x in range(10**7)) ذاكرة O(1)، بخلاف القائمة.
total = sum(x**2 for x in range(100))
print(total)

استهلاك مولّد

تُستهلك المولّدات مرة واحدة. وبعد استنفادها، يُرفع StopIteration ولا يبقى شيء.
gen = (x for x in range(3))
for val in gen:
    print(val)
# gen is now exhausted

المولّد كوسيط لدالة

إذا كان المولّد هو الوسيط الوحيد، فيمكنك حذف الأقواس الإضافية: sum(x**2 for x in range(10)).
print(sum(x**2 for x in range(10)))
print(max(len(w) for w in ['cat', 'elephant', 'ant']))

تسلسل المولّدات

يمكنك تسلسل المولّدات بشكل كسول: evens = (x for x in range(100) if x%2==0); big = (x for x in evens if x>50).
evens = (x for x in range(100) if x % 2 == 0)
big_evens = (x for x in evens if x > 50)
print(list(big_evens))

التحويل إلى list/tuple

تعمل list(gen) أو tuple(gen) على إنشاء جميع القيم فعليًا. استخدم ذلك عندما تحتاج إلى وصول عشوائي أو إلى تكرارات متعددة.
gen = (x**2 for x in range(5))
print(list(gen))

تعبير المولّد مقابل استيعاب القائمة

استخدم المولّد عندما تكرّر مرة واحدة فقط أو تكون مجموعة البيانات كبيرة. واستخدم القائمة عندما تحتاج إلى len() أو الفهرسة أو تكرارات متعددة.
import sys
lst = [x**2 for x in range(1000)]
gen = (x**2 for x in range(1000))
print(sys.getsizeof(lst), sys.getsizeof(gen))

المولّدات اللانهائية

يُعد itertools.count(0) عدّادًا لا نهائيًا. اقرنه بـ islice للحصول على القيم التي تحتاج إليها فقط.
import itertools
first10 = list(itertools.islice(itertools.count(0), 10))
print(first10)

any() وall() مع المولّدات

يتوقف any(x>5 for x in lst) مبكرًا؛ إذ يتوقف عند أول True. ويتوقف all() عند أول False. وهذا فعال جدًا.
nums = [1, 3, 7, 2]
print(any(x > 5 for x in nums))
print(all(x > 0 for x in nums))

خطوط المعالجة

سلسِل التحويلات بشكل كسول: data → filter → transform → aggregate. كل خطوة مولّد، ولا يُنفّذ شيء حتى تدعو الحاجة إليه.
data = range(1000)
filtered = (x for x in data if x % 7 == 0)
transformed = (x * 2 for x in filtered)
print(sum(transformed))

تحقق سريع

ما ميزة الذاكرة الأساسية لتعبير المولّد مقارنةً باستيعاب القائمة؟

خلاصة

تعبيرات المولّدات: (expr for x in it). تقييم كسول يستخدم ذاكرة O(1). تُستهلك مرة واحدة. استخدمها مع sum وany وall وmax. حوّلها إلى قائمة عندما تحتاج إلى تكرارات متعددة.

واصل التقدم

ممتاز! تابع إلى الدرس التالي لتعميق مهاراتك.

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

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

نعم — نص درس «تعبيرات المولّدات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 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
← العودة إلى Python Academy