Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah Pemulangan dan Hasil Berfungsi dalam Penjana Python?

Bagaimanakah Pemulangan dan Hasil Berfungsi dalam Penjana Python?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-25 03:16:02521semak imbas

How Do Return and Yield Work in Python Generators?

Pulangan dan Hasil dalam Penjana Python

Dalam Python sebelum versi 3.3, menggunakan kedua-dua penyataan pulangan dan hasil secara serentak dalam definisi fungsi penjana akan mengakibatkan ralat. Walau bagaimanapun, tingkah laku ini telah berubah dalam Python 3.3.

Pertimbangkan kod berikut:

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

Panggilan x = f() akan mencipta penjana dan x.__next__() akan menaikkan Pengecualian StopIteration. Tingkah laku ini berbeza daripada hanya pulangkan 3, yang akan mengembalikan nilai 3.

Ini kerana dalam Python 3.3, kembalikan dalam penjana kini bersamaan dengan menaikkan StopIteration(). Akibatnya, pengecualian StopIteration mengandungi nilai 3 dalam coretan kod di atas. Mengakses atribut nilai pengecualian akan mendapatkan semula nilai ini.

Selain itu, hasil daripada membolehkan penjana делегировать kepada penjana lain. Pertimbangkan contoh berikut:

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

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

for _ in g():
    pass</code>

Kod ini mencetak 1. g mewakilkan pelaksanaan kepada f, dan nilai yang dikembalikan oleh f (iaitu, 1) diberikan kepada x. Walau bagaimanapun, pernyataan hasil 2 dalam f tidak dilaksanakan kerana pelaksanaan telah diwakilkan kepada g.

Atas ialah kandungan terperinci Bagaimanakah Pemulangan dan Hasil Berfungsi dalam Penjana 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