Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah Penjana Hasil dan Pulangan Berinteraksi dalam Python?

Bagaimanakah Penjana Hasil dan Pulangan Berinteraksi dalam Python?

Barbara Streisand
Barbara Streisandasal
2024-10-25 06:05:29904semak imbas

How Do Generator Yield and Return Interact in Python?

Hasil Penjana dan Interaksi Pulangan dalam Python

Sebelum Python 3.3, menggabungkan pulangan dan hasil dalam definisi fungsi akan mengakibatkan ralat. Walau bagaimanapun, dalam Python 3.3 dan lebih baru, tingkah laku ini telah dikemas kini.

Gelagat Python 3.3

Dalam Python 3.3, penyataan pemulangan dalam fungsi penjana kini diperlakukan sama untuk menaikkan pernyataan StopIteration(). Akibatnya, menggunakan kedua-dua pulangan dan hasil dalam penjana kini bersamaan dengan menaikkan pengecualian StopIteration dengan nilai yang ditentukan.

Contoh:

Pertimbangkan kod berikut:

<code class="python">def f():
    return 3
    yield 2</code>

Apabila fungsi f() dipanggil, ia tidak akan menimbulkan ralat masa jalan lagi. Sebaliknya, fungsi __next__() bagi objek penjana (x) akan menimbulkan pengecualian StopIteration dengan nilai 3:

<code class="python">x = f()
try:
    print(x.__next__())
except StopIteration as e:
    print(e.value)  # Prints "3"</code>

Menghasilkan Nilai yang Dipulangkan

Jika fungsi penjana diwakilkan menggunakan hasil daripada sintaks, nilai penyata pulangan yang dikembalikan akan menjadi hasil penjana yang diwakilkan.

Contoh:

<code class="python">def f():
    return 1
    yield 2

def g():
    x = yield from f()
    print(x)

# Iterate through the generator:
for _ in g():
    pass  # Prints "1"</code>

Dalam contoh ini, penjana f() diwakilkan kepada penjana g() menggunakan hasil daripada. Akibatnya, nilai yang dikembalikan oleh pulangan 1 dalam penjana f() menjadi hasil penjana g().

Atas ialah kandungan terperinci Bagaimanakah Penjana Hasil dan Pulangan Berinteraksi dalam Python?. 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