Bagaimanakah Pemulangan dan Hasil Bekerja Bersama dalam Penjana Python 3.3?

Mary-Kate Olsen
Lepaskan: 2024-10-25 04:39:02
asal
261 orang telah melayarinya

How Do Return and Yield Work Together in Python 3.3 Generators?

Menggunakan Pulangan dan Hasil Bersama dalam Penjana Python

Dalam Python 2, pernyataan pulangan di dalam fungsi penjana yang turut menggunakan hasil akan menghasilkan satu kesilapan. Walau bagaimanapun, dalam Python 3.3, perubahan halus berlaku.

Demonstrasi Kod

Pertimbangkan kod Python 3.3 berikut:

<code class="python">def f():
  return 3
  yield 2
  
x = f()
print(x.__next__())</code>
Salin selepas log masuk

Penjelasan

Dalam kod ini, fungsi f merangkumi kedua-dua pernyataan pulangan dan pernyataan hasil. Apabila fungsi dipanggil, pernyataan pulangan dilaksanakan terlebih dahulu, dan nilai 3 dikembalikan. Akibatnya, pernyataan hasil tidak dilaksanakan.

Apabila penjana x diulang dengan memanggil kaedah seterusnyanya, pengecualian StopIteration dinaikkan dengan nilai 3. Ini bermakna bahawa iterator generator telah habis, dan nilai yang dikembalikan oleh pernyataan pulangan tersedia sebagai atribut nilai pengecualian.

Mekanisme Baharu dalam Python 3.3

Menurut PEP 380 , tingkah laku ini ialah ciri baharu yang diperkenalkan dalam Python 3.3. Ia bersamaan dengan menulis:

<code class="python">def f():
  yield 3
  raise StopIteration</code>
Salin selepas log masuk

Contoh dengan Hasil daripada

Contoh berikut menunjukkan cara tingkah laku ini mempengaruhi penjana yang diwakilkan menggunakan hasil daripada sintaks:

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

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

# g is still a generator so we need to iterate to run it:
for _ in g():
    pass</code>
Salin selepas log masuk

Dalam kes ini, hasil daripada penyata mewakilkan kepada penjana f. Memandangkan f mengembalikan nilai tetapi tidak mempunyai lagi pernyataan hasil, nilai 1 dicetak. Walau bagaimanapun, pernyataan hasil 2 dalam f tidak dilaksanakan.

Atas ialah kandungan terperinci Bagaimanakah Pemulangan dan Hasil Bekerja Bersama dalam Penjana Python 3.3?. 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!