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
Lepaskan: 2024-10-25 03:16:02
asal
519 orang telah melayarinya

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

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

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!

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