Hasil Penjana dan Interaksi Pulangan dalam Python
Sebelum Python 3.3, menggabungkan pulangan dan hasil dalam definisi fungsi akan mengakibatkan ralat. Walau bagaimanapun, dalam Python 3.3 dan lebih baru, tingkah laku ini telah dikemas kini.
Gelagat Python 3.3
Dalam Python 3.3, penyataan pemulangan dalam fungsi penjana kini diperlakukan sama untuk menaikkan pernyataan StopIteration(). Akibatnya, menggunakan kedua-dua pulangan dan hasil dalam penjana kini bersamaan dengan menaikkan pengecualian StopIteration dengan nilai yang ditentukan.
Contoh:
Pertimbangkan kod berikut:
<code class="python">def f(): return 3 yield 2</code>
Apabila fungsi f() dipanggil, ia tidak akan menimbulkan ralat masa jalan lagi. Sebaliknya, fungsi __next__() bagi objek penjana (x) akan menimbulkan pengecualian StopIteration dengan nilai 3:
<code class="python">x = f() try: print(x.__next__()) except StopIteration as e: print(e.value) # Prints "3"</code>
Menghasilkan Nilai yang Dipulangkan
Jika fungsi penjana diwakilkan menggunakan hasil daripada sintaks, nilai penyata pulangan yang dikembalikan akan menjadi hasil penjana yang diwakilkan.
Contoh:
<code class="python">def f(): return 1 yield 2 def g(): x = yield from f() print(x) # Iterate through the generator: for _ in g(): pass # Prints "1"</code>
Dalam contoh ini, penjana f() diwakilkan kepada penjana g() menggunakan hasil daripada. Akibatnya, nilai yang dikembalikan oleh pulangan 1 dalam penjana f() menjadi hasil penjana g().
Atas ialah kandungan terperinci Bagaimanakah Penjana Hasil dan Pulangan Berinteraksi dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!