Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Semak sama ada Penjana Kosong Sebelum Mengulang?

Bagaimana untuk Semak sama ada Penjana Kosong Sebelum Mengulang?

Patricia Arquette
Patricia Arquetteasal
2024-10-20 12:12:301030semak imbas

How to Check if a Generator is Empty Before Iterating?

Menentukan Kekosongan Penjana Sebelum Lelaran

Apabila bekerja dengan penjana, ia boleh memberi manfaat untuk memastikan sama ada penjana kosong terlebih dahulu. Ini mengelakkan pemprosesan yang tidak perlu dan mengurangkan kerumitan kod.

Untuk mencapai matlamat ini, satu pendekatan ialah menggunakan fungsi mengintip, yang cuba mendapatkan semula elemen pertama penjana. Jika pengecualian StopIteration dinaikkan, ia menandakan penjana kosong. Berikut ialah pelaksanaan:

<code class="python">def peek(iterable):
    try:
        first = next(iterable)
    except StopIteration:
        return None
    return first, itertools.chain([first], iterable)</code>

Dalam fungsi ini:

  • next(iterable) mendapatkan semula elemen pertama penjana atau menimbulkan pengecualian StopIteration jika kosong.
  • Hasilnya disimpan dahulu. Jika kosong, pertama ialah Tiada.
  • Untuk mengekalkan keadaan penjana, iterable asal dibalut dengan yang baharu menggunakan itertools.chain([first], iterable).

Anda boleh menggunakan fungsi ini seperti berikut:

<code class="python">res = peek(mysequence)
if res is None:
    # Generator is empty
elif res[0] is None:
    # Generator is not empty but first element is None
else:
    # Generator is not empty with non-None first element</code>

Pendekatan ini secara berkesan menentukan kekosongan penjana sebelum lelaran, menyediakan cara yang mudah untuk mengoptimumkan kod anda dan mengendalikan penjana kosong dengan anggun.

Atas ialah kandungan terperinci Bagaimana untuk Semak sama ada Penjana Kosong Sebelum Mengulang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn