Bagaimanakah Pulangan Mempengaruhi Gelagat Penjana dalam Python 3.3?

Barbara Streisand
Lepaskan: 2024-10-24 17:16:02
asal
777 orang telah melayarinya

How does Return Affect Generator Behavior in Python 3.3?

Return Inside Generator with Yield

Dalam Python 3.3, perubahan ketara telah diperkenalkan berkenaan penggunaan pulangan bersama hasil dalam fungsi penjana. Tidak seperti Python 2, di mana kod tersebut akan mencetuskan ralat, Python 3.3 membenarkannya. Walau bagaimanapun, tingkah laku berbeza daripada yang dijangkakan.

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

Jika anda menjalankan kod ini, anda akan melihat pengecualian dilemparkan: StopIteration: 3. Pengecualian ini mempunyai dua aspek utama:

  • StopIteration is Raised: Pernyataan pulangan di dalam fungsi generator kini bersamaan dengan menaikkan StopIteration().
  • Nilai Boleh Diakses melalui Pengecualian: Nilai yang dikembalikan (dalam kes ini, 3) boleh diakses melalui atribut nilai objek pengecualian.

Jadi, apabila penjana fungsi mengandungi kedua-dua pulangan dan hasil, ia seperti menaikkan pengecualian StopIteration dengan nilai pulangan yang ditentukan. Ini bermakna penjana akan ditamatkan dan nilai yang dikembalikan akan tersedia melalui atribut nilai pengecualian.

Dalam erti kata lain, walaupun pemulangan dalam fungsi penjana sebelum ini adalah ralat, ia kini mempunyai tujuan khusus: untuk menamatkan penjana dan mengembalikan nilai melalui mekanisme pengendalian pengecualian.

Tingkah laku ini mempunyai implikasi untuk delegasi penjana menggunakan hasil baharu daripada sintaks dalam Python 3.3. Contohnya:

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

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

# Iterate over generator to run it
for _ in g():
    pass</code>
Salin selepas log masuk

Dalam kod ini, penjana f mengembalikan 1 dan kemudian mewakilkan kepada penjana g, yang mencetak nilai yang dikembalikan. Walau bagaimanapun, anda hanya akan melihat 1 dicetak, menunjukkan bahawa pernyataan hasil menghentikan perwakilan sebelum pernyataan hasil dalam f boleh menghasilkan nilai 2.

Atas ialah kandungan terperinci Bagaimanakah Pulangan Mempengaruhi Gelagat Penjana dalam 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