تقنية

itertools.product في بايثون: متى تستهلك المدخل؟

product: قبل أول نتيجة، سجل القراءة [2,5].
قراءة عند البناء.

product تجمع قيم المدخلات المحدودة قبل توليد النتائج؛ كون المخرج مكررًا لا يؤجل قراءة المدخل هنا. [1]

الخلاصة السريعة

عند البناء، قبل أول زوج. [1]

  • product تجمع قيم المدخلات المحدودة قبل توليد النتائج؛ كون المخرج مكررًا لا يؤجل قراءة المدخل هنا. [1]
  • نسجل القيم قبل yield؛ السجل يبين قراءة البناء. [1]
  • على CPython 3.12.14، المولد يعطي 2 و5، والعامل الثاني [8,11]؛ نبني product. [1]
  • قبل next(out)، seen تساوي [2,5]؛ المولد مستنفد. أول زوج (2,8)، والباقي [(2,11),(5,8),(5,11)]. [1]
  • تحكم بمولد جديد وchain.from_iterable: السجل فارغ قبل الطلب؛ أول نتيجة 2 تجعل السجل [2]؛ الوثائق تقصر product على مدخلات محدودة. [1]

قراءة المدخل

product تجمع قيم المدخلات المحدودة قبل توليد النتائج؛ كون المخرج مكررًا لا يؤجل قراءة المدخل هنا. [1]

سجل القيم

نسجل القيم قبل yield؛ السجل يبين قراءة البناء. [1]

بناء المنتج

على CPython 3.12.14، المولد يعطي 2 و5، والعامل الثاني [8,11]؛ نبني product. [1]

from itertools import product,chain def rows(log): for value in [2,5]: log.append(value) yield value seen=[] g=rows(seen) out=product(g,[8,11]) print(seen,next(g,"done")) print(next(out),list(out)) [1]

chain: السجل فارغ قبل الطلب، ثم [2] بعد أول نتيجة.
قراءة عند الطلب.

التوقيت والتحكم

قبل next(out)، seen تساوي [2,5]؛ المولد مستنفد. أول زوج (2,8)، والباقي [(2,11),(5,8),(5,11)]. [1]

other_seen=[] lazy=chain.from_iterable((rows(other_seen),)) print(other_seen) print(next(lazy),other_seen) [1]

تحكم بمولد جديد وchain.from_iterable: السجل فارغ قبل الطلب؛ أول نتيجة 2 تجعل السجل [2]؛ الوثائق تقصر product على مدخلات محدودة. [1]

المراجع

  1. Python product/from_iterable

للتوسع: لغات البرمجة.

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