Apa hasil Python?
Kata kunci hasil dalam python berfungsi seperti pengembalian dengan satu-satunya
perbedaannya adalah bahwa alih-alih mengembalikan nilai, ia mengembalikan objek generator ke pemanggil.
Ketika sebuah fungsi dipanggil dan rangkaian eksekusi menemukan kata kunci hasil dalam fungsi tersebut, eksekusi fungsi berhenti di baris itu sendiri dan mengembalikan objek generator kembali ke pemanggil.
Dalam tutorial Python ini, Anda akan belajar:
- Apa hasil Python?
- Sintaksis
- Apa itu Generator dengan Python?
- Perbedaan antara Fungsi normal v / s Fungsi generator.
- Bagaimana cara membaca nilai dari generator?
- Generator adalah sekali pakai
- Contoh: Generator dan hasil untuk Seri Fibonacci
- Contoh: Memanggil Fungsi dengan Yield
- Kapan menggunakan Yield Alih-alih Return dengan Python
- Hasil vs. Pengembalian
Sintaksis
yield expression
Deskripsi
Hasil Python mengembalikan objek generator. Generator adalah fungsi khusus yang harus diiterasi untuk mendapatkan nilainya.
Kata kunci hasil mengubah ekspresi yang diberikan menjadi fungsi generator yang mengembalikan objek generator. Untuk mendapatkan nilai objek, itu harus diiterasi untuk membaca nilai yang diberikan kepada hasil.
Contoh: Metode Hasil
Berikut adalah contoh sederhana dari hasil. Fungsi testyield () memiliki kata kunci hasil dengan string "Selamat Datang di Tutorial Python Guru99". Ketika fungsi dipanggil, output dicetak dan memberikan objek generator, bukan nilai sebenarnya.
def testyield():yield "Welcome to Guru99 Python Tutorials"output = testyield()print(output)
Keluaran:
Output yang diberikan adalah objek generator, yang memiliki nilai yang telah kita berikan untuk menghasilkan.
Tetapi kita tidak mendapatkan pesan yang harus kita berikan untuk menghasilkan keluaran!
Untuk mencetak pesan yang diberikan untuk menghasilkan harus mengulang objek generator seperti yang ditunjukkan pada contoh di bawah ini:
def testyield():yield "Welcome to Guru99 Python Tutorials"output = testyield()for i in output:print(i)
Keluaran
Welcome to Guru99 Python Tutorials
Apa itu Generator dengan Python?
Generator adalah fungsi yang mengembalikan objek generator yang dapat diulang. Nilai dari objek generator diambil satu per satu dan bukan daftar lengkap bersama-sama dan karenanya untuk mendapatkan nilai sebenarnya Anda bisa menggunakan for-loop, menggunakan metode next () atau list ().
Menggunakan fungsi Generator
Anda dapat membuat generator menggunakan fungsi generator dan menggunakan ekspresi generator.
Fungsi generator seperti fungsi normal, alih-alih memiliki nilai balik, ia akan memiliki kata kunci hasil.
Untuk membuat fungsi generator, Anda harus menambahkan kata kunci hasil. Contoh berikut menunjukkan cara membuat fungsi generator.
def generator():yield "H"yield "E"yield "L"yield "L"yield "O"test = generator()for i in test:print(i)
Keluaran:
HELLO
Perbedaan antara Fungsi normal v / s Fungsi generator.
Mari kita pahami bagaimana fungsi generator berbeda dari fungsi normal.
Ada 2 fungsi normal_test () dan generator_test ().
Kedua fungsi tersebut seharusnya mengembalikan string "Hello World". Normal_test () menggunakan return dan generator_test () menggunakan yield.
# 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
Keluaran:
Hello World
Outputnya menunjukkan bahwa ketika Anda memanggil fungsi normal normal_test () ia mengembalikan string Hello World. Untuk fungsi generator dengan kata kunci yield, ia mengembalikan
Inilah perbedaan utama antara fungsi generator dan fungsi normal. Sekarang untuk mendapatkan nilai dari objek generator kita perlu menggunakan objek di dalam for loop atau menggunakan metode next () atau menggunakan list ().
print(next(generator_test())) # will output Hello World
Satu lagi perbedaan untuk ditambahkan ke fungsi normal fungsi generator v / s adalah bahwa ketika Anda memanggil fungsi normal, eksekusi akan mulai dan berhenti ketika ia kembali dan nilainya dikembalikan ke pemanggil. Jadi ketika eksekusi dimulai, Anda tidak dapat menghentikan fungsi normal di antaranya dan hanya akan berhenti ketika menemukan kata kunci kembali.
Tetapi dalam kasus fungsi generator setelah eksekusi dimulai saat mendapatkan hasil pertama, ia menghentikan eksekusi dan mengembalikan objek generator. Anda dapat menggunakan objek generator untuk mendapatkan nilai dan juga, menjeda dan melanjutkan kembali sesuai kebutuhan Anda.
Bagaimana cara membaca nilai dari generator?
Anda bisa membaca nilai dari objek generator menggunakan list (), for-loop dan menggunakan metode next ().
Menggunakan: list ()
List adalah objek iterable yang memiliki elemen di dalam tanda kurung. Menggunakan list () pada objek generator akan memberikan semua nilai yang dimiliki generator.
def even_numbers(n):for x in range(n):if (x%2==0):yield xnum = even_numbers(10)print(list(num))
Keluaran:
[0, 2, 4, 6, 8]
Menggunakan: for-in
Dalam contoh, ada fungsi yang didefinisikan even_number () yang akan memberi Anda semua bilangan genap untuk n yang ditentukan. Panggilan ke fungsi even_numbers () akan mengembalikan objek generator, yang digunakan di dalam for-loop.
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)
Keluaran:
02468
Menggunakan next ()
Metode next () akan memberi Anda item berikutnya dalam daftar, larik, atau objek. Setelah daftar kosong, dan jika next () dipanggil, itu akan mengembalikan kesalahan dengan sinyal stopIteration. Kesalahan ini, dari next () menunjukkan bahwa tidak ada lagi item dalam daftar.
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))
Keluaran:
02468Traceback (most recent call last):File "main.py", line 11, inprint(next(num))StopIteration
Generator adalah sekali pakai
Jika generator mereka tersedia untuk digunakan hanya sekali. Jika Anda mencoba menggunakannya lagi, itu 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))
Keluaran:
02468Calling the generator again: []
Jika Anda ingin output digunakan lagi, Anda harus membuat panggilan berfungsi lagi.
Contoh: Generator dan hasil untuk Seri Fibonacci
Contoh berikut menunjukkan cara menggunakan generator dan hasil dengan Python. Contoh tersebut akan menghasilkan deret 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)
Keluaran:
0112358
Contoh: Memanggil Fungsi dengan Yield
Dalam contoh ini akan melihat bagaimana memanggil fungsi dengan yield.
Contoh di bawah ini memiliki fungsi bernama test () yang mengembalikan kuadrat dari bilangan yang diberikan. Ada fungsi lain bernama getSquare () yang menggunakan test () dengan kata kunci hasil. Outputnya memberikan nilai kuadrat untuk rentang angka tertentu.
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)
Keluaran:
0149162536496481
Kapan menggunakan Yield Alih-alih Return dengan Python
Kata kunci Python3 Yield mengembalikan generator ke pemanggil dan eksekusi kode dimulai hanya ketika generator diiterasi.
Sebuah kembali dalam suatu fungsi adalah akhir dari pelaksanaan fungsi, dan nilai tunggal diberikan kembali ke pemanggil.
Di sini, adalah situasi ketika Anda harus menggunakan Yield daripada Return
- Gunakan hasil daripada pengembalian saat ukuran datanya besar
- Hasil adalah pilihan terbaik saat Anda membutuhkan eksekusi lebih cepat pada kumpulan data yang besar
- Gunakan yield ketika Anda ingin mengembalikan sejumlah besar nilai ke fungsi pemanggil
- Hasil adalah cara efisien untuk menghasilkan data yang besar atau tidak terbatas.
Hasil vs. Pengembalian
Inilah perbedaan antara Yield dan Return
Menghasilkan | Kembali |
Yield mengembalikan objek generator ke pemanggil, dan eksekusi kode dimulai hanya ketika generator diiterasi. | Pengembalian suatu fungsi adalah akhir dari eksekusi fungsi, dan satu nilai diberikan kembali ke pemanggil. |
Saat fungsi dipanggil dan menemukan kata kunci hasil, eksekusi fungsi akan berhenti. Ini mengembalikan objek generator kembali ke pemanggil. Eksekusi fungsi akan dimulai hanya ketika objek generator dijalankan. | Ketika fungsi dipanggil, eksekusi dimulai dan nilainya diberikan kembali ke pemanggil jika ada kata kunci return. Pengembalian di dalam fungsi menandai akhir dari eksekusi fungsi. |
menghasilkan ekspresi | ekspresi kembali |
Tidak ada memori yang digunakan ketika kata kunci hasil digunakan. | Memori dialokasikan untuk nilai yang dikembalikan. |
Sangat berguna jika Anda harus berurusan dengan ukuran data yang besar karena memori tidak digunakan. | Nyaman untuk ukuran data yang sangat kecil. |
Performa akan lebih baik jika kata kunci hasil digunakan untuk ukuran data yang besar. | Memori yang banyak digunakan jika ukuran datanya besar sehingga akan menghambat kinerja. |
Waktu eksekusi lebih cepat jika menghasilkan untuk ukuran data yang besar. | Waktu eksekusi yang digunakan lebih lama karena ada pemrosesan tambahan yang dilakukan jika ukuran data Anda besar, ini akan berfungsi dengan baik untuk ukuran data kecil. |
Ringkasan:
- Kata kunci hasil dalam python bekerja seperti pengembalian dengan satu-satunya perbedaan adalah bahwa alih-alih mengembalikan nilai, ia mengembalikan fungsi generator ke pemanggil.
- Generator adalah jenis iterator khusus yang, sekali digunakan, tidak akan tersedia lagi. Nilainya tidak disimpan dalam memori dan hanya tersedia saat dipanggil.
- Nilai dari generator dapat dibaca menggunakan metode for-in, list () dan next ().
- Perbedaan utama antara yield dan return adalah yield mengembalikan fungsi generator ke pemanggil dan return memberikan nilai tunggal kepada pemanggil.
- Yield tidak menyimpan nilai apa pun dalam memori, dan keuntungannya adalah berguna jika ukuran datanya besar, karena tidak ada nilai yang disimpan dalam memori.
- Performa akan lebih baik jika kata kunci hasil digunakan dibandingkan untuk menghasilkan ukuran data yang besar.