Apakah hasil Python?
Kata kunci hasil dalam python berfungsi seperti pengembalian dengan satu-satunya
perbezaannya adalah bahawa bukannya mengembalikan nilai, ia memberikan kembali objek penjana kepada pemanggil.
Apabila fungsi dipanggil dan utas pelaksanaan mencari kata kunci hasil dalam fungsi, pelaksanaan fungsi berhenti pada baris itu sendiri dan ia mengembalikan objek penjana kembali kepada pemanggil.
Dalam tutorial Python ini, anda akan belajar:
- Apakah hasil Python?
- Sintaks
- Apakah Penjana di Python?
- Perbezaan antara fungsi Normal v / s fungsi Generator.
- Bagaimana membaca nilai dari penjana?
- Penjana adalah Penggunaan sekali sahaja
- Contoh: Penjana dan hasil untuk Fibonacci Series
- Contoh: Fungsi Menyebut dengan Hasil
- Bila hendak menggunakan Yield, bukannya Return in Python
- Hasil berbanding Pulangan
Sintaks
yield expression
Penerangan
Hasil Python mengembalikan objek penjana. Penjana adalah fungsi khas yang perlu dilakukan untuk mendapatkan nilai.
Kata kunci hasil menukar ungkapan yang diberikan menjadi fungsi penjana yang memberikan kembali objek penjana. Untuk mendapatkan nilai-nilai objek, ia harus diulang untuk membaca nilai-nilai yang diberikan kepada hasil.
Contoh: Kaedah Hasil
Berikut adalah contoh hasil yang mudah. Fungsi testyield () mempunyai kata kunci hasil dengan rentetan "Selamat Datang di Tutorial Guru99 Python". Apabila fungsi dipanggil, output dicetak dan memberikan objek penjana dan bukannya nilai sebenarnya.
def testyield():yield "Welcome to Guru99 Python Tutorials"output = testyield()print(output)
Pengeluaran:
Output yang diberikan adalah objek penjana, yang mempunyai nilai yang telah kita berikan untuk menghasilkan.
Tetapi kita tidak mendapat pesan yang harus kita berikan untuk menghasilkan output!
Untuk mencetak mesej yang diberikan untuk menghasilkan perlu mengulang objek penjana seperti yang ditunjukkan dalam contoh di bawah:
def testyield():yield "Welcome to Guru99 Python Tutorials"output = testyield()for i in output:print(i)
Pengeluaran
Welcome to Guru99 Python Tutorials
Apakah Penjana di Python?
Generator adalah fungsi yang mengembalikan objek penjana berulang. Nilai dari objek penjana diambil satu per satu dan bukannya senarai penuh bersama-sama dan oleh itu untuk mendapatkan nilai sebenar anda boleh menggunakan for-loop, menggunakan kaedah seterusnya () atau senarai ().
Menggunakan fungsi Generator
Anda boleh membuat penjana menggunakan fungsi penjana dan menggunakan ekspresi penjana.
Fungsi penjana adalah seperti fungsi biasa, bukannya mempunyai nilai kembali, ia akan mempunyai kata kunci hasil.
Untuk membuat fungsi penjana, anda perlu menambahkan kata kunci hasil. Contoh berikut menunjukkan cara membuat fungsi penjana.
def generator():yield "H"yield "E"yield "L"yield "L"yield "O"test = generator()for i in test:print(i)
Pengeluaran:
HELLO
Perbezaan antara fungsi Normal v / s fungsi Generator.
Mari kita fahami bagaimana fungsi penjana berbeza dari fungsi biasa.
Terdapat 2 fungsi normal_test () dan generator_test ().
Kedua-dua fungsi tersebut dikira untuk mengembalikan rentetan "Hello World". The normal_test () menggunakan return dan generator_test () menggunakan hasil.
# Normal functiondef normal_test():return "Hello World"#Generator functiondef generator_test():yield "Hello World"print(normal_test()) #call to normal functionprint(generator_test()) # call to generator function
Pengeluaran:
Hello World
Output menunjukkan bahawa apabila anda memanggil fungsi normal normal_test () ia mengembalikan tali Hello World Untuk fungsi penjana dengan kata kunci hasil, ia mengembalikan
Ini adalah perbezaan utama antara fungsi generator dan fungsi normal. Sekarang untuk mendapatkan nilai dari objek penjana, kita perlu menggunakan objek di dalam untuk gelung atau menggunakan kaedah seterusnya () atau menggunakan senarai ().
print(next(generator_test())) # will output Hello World
Satu lagi perbezaan yang perlu ditambahkan ke fungsi generator v / s fungsi normal adalah apabila anda memanggil fungsi normal, pelaksanaan akan mulai dan berhenti ketika ia akan kembali dan nilainya dikembalikan kepada pemanggil. Oleh itu, apabila pelaksanaan bermula, anda tidak boleh menghentikan fungsi normal di antara dan hanya akan berhenti apabila terdapat kata kunci kembali.
Tetapi sekiranya fungsi penjana setelah pelaksanaan dimulakan ketika mendapat hasil pertama, ia menghentikan pelaksanaannya dan memberikan kembali objek penjana. Anda boleh menggunakan objek penjana untuk mendapatkan nilai dan juga, menjeda dan menyambung semula mengikut keperluan anda.
Bagaimana membaca nilai dari penjana?
Anda boleh membaca nilai dari objek penjana menggunakan kaedah list (), for-loop dan menggunakan kaedah seterusnya ().
Menggunakan: senarai ()
Senarai adalah objek berulang yang mempunyai unsur-unsur di dalam kurungan. Menggunakan senarai () pada objek penjana akan memberikan semua nilai yang dimiliki penjana.
def even_numbers(n):for x in range(n):if (x%2==0):yield xnum = even_numbers(10)print(list(num))
Pengeluaran:
[0, 2, 4, 6, 8]
Menggunakan: untuk-masuk
Dalam contohnya, terdapat fungsi yang ditentukan nombor genap () yang akan memberikan anda semua nombor genap untuk n yang ditentukan. Panggilan ke fungsi even_numbers () akan mengembalikan objek penjana, yang digunakan di dalam untuk gelung.
Contoh:
def even_numbers(n):for x in range(n):if (x%2==0):yield xnum = even_numbers(10)for i in num:print(i)
Pengeluaran:
02468
Menggunakan seterusnya ()
Kaedah seterusnya () akan memberi anda item seterusnya dalam senarai, susunan, atau objek. Setelah senarai kosong, dan jika berikutnya () dipanggil, ia akan memberikan kesalahan dengan isyarat stopIteration. Kesalahan ini, dari seterusnya () menunjukkan bahawa tidak ada lagi item dalam senarai.
def even_numbers(n):for x in range(n):if (x%2==0):yield xnum = even_numbers(10)print(next(num))print(next(num))print(next(num))print(next(num))print(next(num))print(next(num))
Pengeluaran:
02468Traceback (most recent call last):File "main.py", line 11, inprint(next(num))StopIteration
Penjana adalah Penggunaan sekali sahaja
Sekiranya terdapat generator, ia hanya boleh digunakan sekali sahaja. Sekiranya anda cuba menggunakannya lagi, ia akan kosong.
Sebagai contoh:
def even_numbers(n):for x in range(n):if (x%2==0):yield xnum = even_numbers(10)for i in num:print(i)print("\n")print("Calling the generator again: ", list(num))
Pengeluaran:
02468Calling the generator again: []
Sekiranya anda mahu output digunakan lagi, anda perlu membuat panggilan berfungsi semula.
Contoh: Penjana dan hasil untuk Fibonacci Series
Contoh berikut menunjukkan cara menggunakan penjana dan hasil dalam Python. Contohnya akan menghasilkan siri Fibonacci.
def getFibonnaciSeries(num):c1, c2 = 0, 1count = 0while count < num:yield c1c3 = c1 + c2c1 = c2c2 = c3count += 1fin = getFibonnaciSeries(7)print(fin)for i in fin:print(i)
Pengeluaran:
0112358
Contoh: Fungsi Menyebut dengan Hasil
Dalam contoh ini akan melihat bagaimana memanggil fungsi dengan hasil.
Contoh di bawah mempunyai fungsi yang disebut test () yang mengembalikan kuasa dua nombor yang diberikan. Terdapat fungsi lain yang dipanggil getSquare () yang menggunakan test () dengan kata kunci hasil. Keluaran memberikan nilai kuasa dua untuk julat nombor yang diberikan.
def test(n):return n*ndef getSquare(n):for i in range(n):yield test(i)sq = getSquare(10)for i in sq:print(i)
Pengeluaran:
0149162536496481
Bila hendak menggunakan Yield, bukannya Return in Python
Kata kunci Python3 Yield mengembalikan penjana kepada pemanggil dan pelaksanaan kod bermula hanya apabila penjana diulang.
A kembali dalam satu majlis adalah akhir pelaksanaan fungsi, dan nilai tunggal diberikan kembali kepada pemanggil.
Inilah keadaan ketika anda harus menggunakan Yield dan bukannya Return
- Gunakan hasil bukan pulangan apabila ukuran data besar
- Hasil adalah pilihan terbaik apabila anda memerlukan pelaksanaan lebih cepat pada set data yang besar
- Gunakan hasil apabila anda ingin mengembalikan sejumlah besar nilai ke fungsi panggilan
- Hasil adalah kaedah yang berkesan untuk menghasilkan data yang besar atau tidak terbatas.
Hasil berbanding Pulangan
Berikut adalah perbezaan antara Hasil dan Pulangan
Hasil | Kembali |
Hasil mengembalikan objek penjana kepada pemanggil, dan pelaksanaan kod bermula hanya apabila penjana diulang. | Pengembalian dalam fungsi adalah akhir pelaksanaan fungsi, dan satu nilai diberikan kembali kepada pemanggil. |
Apabila fungsi dipanggil dan menemui kata kunci hasil, pelaksanaan fungsi akan berhenti. Ia mengembalikan objek penjana kepada pemanggil. Pelaksanaan fungsi akan bermula hanya apabila objek penjana dijalankan. | Apabila fungsi dipanggil, pelaksanaan dimulakan dan nilainya diberikan kembali kepada pemanggil jika ada kata kunci kembali. Kembalinya fungsi menandakan berakhirnya pelaksanaan fungsi. |
ungkapan hasil | ungkapan kembali |
Tidak ada memori yang digunakan semasa kata kunci hasil digunakan. | Memori diperuntukkan untuk nilai yang dikembalikan. |
Sangat berguna jika anda harus berhadapan dengan ukuran data yang besar kerana memori tidak digunakan. | Nyaman untuk ukuran data yang sangat kecil. |
Prestasi lebih baik jika kata kunci hasil digunakan untuk ukuran data yang besar. | Banyak memori digunakan sekiranya ukuran data sangat besar yang akan mengganggu prestasi. |
Masa pelaksanaan lebih cepat sekiranya hasil untuk ukuran data yang besar. | Masa pelaksanaan yang digunakan lebih banyak kerana terdapat pemprosesan tambahan yang dilakukan sekiranya ukuran data anda besar, ia akan berfungsi dengan baik untuk ukuran data kecil. |
Ringkasan:
- Kata kunci hasil dalam python berfungsi seperti pengembalian dengan satu-satunya perbezaan adalah bahawa bukannya mengembalikan nilai, ia memberikan fungsi penjana kepada pemanggil.
- Penjana adalah jenis iterator khas yang, setelah digunakan, tidak akan tersedia lagi. Nilai tidak disimpan dalam memori dan hanya tersedia apabila dipanggil.
- Nilai dari penjana boleh dibaca menggunakan kaedah for-in, list () dan next ().
- Perbezaan utama antara hasil dan pulangan adalah bahawa hasil mengembalikan fungsi penjana kepada pemanggil dan pengembalian memberikan nilai tunggal kepada pemanggil.
- Hasil tidak menyimpan nilai apa pun dalam memori, dan kelebihannya adalah berguna ketika ukuran data besar, kerana tidak ada nilai yang disimpan dalam memori.
- Prestasi lebih baik jika kata kunci hasil digunakan sebagai perbandingan untuk mengembalikan ukuran data yang besar.