Bagaimanakah Penjana Hasil dan Pulangan Berinteraksi dalam Python?

Barbara Streisand
Lepaskan: 2024-10-25 06:05:29
asal
914 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!