Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah Pemulangan dan Hasil Bekerja Bersama dalam Penjana Python 3.3?

Bagaimanakah Pemulangan dan Hasil Bekerja Bersama dalam Penjana Python 3.3?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-25 04:39:02244semak imbas

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>

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>

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>

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!

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