Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial programming >> Python

Hasil dalam Python Tutorial:Generator &Hasil vs Contoh Pengembalian

Apa itu 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 suatu fungsi dipanggil dan utas eksekusi menemukan kata kunci hasil dalam fungsi, eksekusi fungsi berhenti pada baris itu sendiri dan mengembalikan objek generator kembali ke pemanggil.

Dalam tutorial Python ini, Anda akan belajar:

Sintaks

yield expression

Deskripsi

Hasil python mengembalikan objek generator. Generator adalah fungsi khusus yang harus diulang untuk mendapatkan nilai.

Kata kunci hasil mengubah ekspresi yang diberikan menjadi fungsi generator yang mengembalikan objek generator. Untuk mendapatkan nilai dari objek, itu harus diulang untuk membaca nilai yang diberikan ke hasil.

Contoh:Metode Hasil

Berikut adalah contoh sederhana dari hasil. Fungsi testyield() memiliki kata kunci hasil dengan string “Selamat datang di Guru99 Python Tutorials”. Saat fungsi dipanggil, output dicetak dan memberikan objek generator alih-alih nilai sebenarnya.

def testyield():
  yield "Welcome to Guru99 Python Tutorials"
output = testyield()
print(output)

Keluaran:

<generator object testyield at 0x00000028265EB9A8>

Output yang diberikan adalah objek generator, yang memiliki nilai yang telah kita berikan untuk dihasilkan.

Tapi kita tidak mendapatkan pesan yang harus kita berikan untuk menghasilkan output!

Untuk mencetak pesan yang diberikan untuk menghasilkan harus mengulangi 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 di Python?

Generator adalah fungsi yang mengembalikan objek generator yang dapat diubah. Nilai dari objek generator diambil satu per satu alih-alih daftar lengkap bersama-sama dan karenanya untuk mendapatkan nilai aktual, Anda dapat 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:

H
E
L
L
O

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 function
def normal_test():
    return "Hello World"
	
#Generator function
def generator_test():
	yield "Hello World"
print(normal_test()) #call to normal function
print(generator_test()) # call to generator function

Keluaran:

Hello World
<generator object generator_test at 0x00000012F2F5BA20>

Outputnya menunjukkan bahwa ketika Anda memanggil fungsi normal normal_test() ia mengembalikan string Hello World. Untuk fungsi generator dengan kata kunci hasil, ia mengembalikan dan bukan string.

Ini adalah 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 menambahkan fungsi normal v/s generator function adalah ketika Anda memanggil fungsi normal, eksekusi akan dimulai dan berhenti ketika sampai kembali dan nilainya dikembalikan ke pemanggil. Jadi ketika eksekusi dimulai, Anda tidak dapat menghentikan fungsi normal di antaranya dan itu hanya akan berhenti ketika menemukan kata kunci return.

Tetapi dalam kasus fungsi generator setelah eksekusi dimulai ketika mendapat hasil pertama, ia menghentikan eksekusi dan mengembalikan objek generator. Anda dapat menggunakan objek generator untuk mendapatkan nilai dan juga, jeda dan lanjutkan kembali sesuai kebutuhan Anda.

Bagaimana cara membaca nilai dari generator?

Anda dapat membaca nilai dari objek generator menggunakan list(), for-loop dan menggunakan metode next().

Menggunakan :list()

Daftar adalah objek yang dapat diubah yang memiliki elemen-elemennya 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 x       
num = even_numbers(10)
print(list(num))

Keluaran:

[0, 2, 4, 6, 8]

Menggunakan :for-in

Dalam contoh, ada fungsi yang didefinisikan even_numbers() 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 x       
num = even_numbers(10)
for i in num:
    print(i)

Keluaran:

0
2
4
6
8

Menggunakan berikutnya()

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 x       
num = even_numbers(10)
print(next(num))
print(next(num))
print(next(num))
print(next(num))
print(next(num))
print(next(num))

Keluaran:

0
2
4
6
8
Traceback (most recent call last):
  File "main.py", line 11, in <module>
    print(next(num))
StopIteration

Generator adalah Penggunaan satu kali

Memetikan generator mereka tersedia untuk digunakan hanya sekali. Jika Anda mencoba menggunakannya lagi, itu akan kosong.

Misalnya:

def even_numbers(n):
    for x in range(n):
       if (x%2==0): 
           yield x       
num = even_numbers(10)
for i in num:
    print(i)

print("\n")
print("Calling the generator again: ", list(num))

Keluaran:

0
2
4
6
8
Calling the generator again:  []

Jika Anda ingin output digunakan lagi, Anda harus membuat panggilan agar berfungsi lagi.

Contoh:Generator dan hasil untuk Deret Fibonacci

Contoh berikut menunjukkan cara menggunakan generator dan menghasilkan di Python. Contoh akan menghasilkan deret Fibonacci.

def getFibonnaciSeries(num):
    c1, c2 = 0, 1
    count = 0
    while count < num:
        yield c1
        c3 = c1 + c2
        c1 = c2
        c2 = c3
        count += 1
fin = getFibonnaciSeries(7)
print(fin)
for i in fin:
    print(i)

Keluaran:

<generator object getFibonnaciSeries at 0x0000007F39C8BA20>
0
1
1
2
3
5
8

Contoh:Memanggil Fungsi dengan Hasil

Dalam contoh ini akan melihat cara memanggil fungsi dengan hasil.

Contoh di bawah ini memiliki fungsi yang disebut test() yang mengembalikan kuadrat dari angka yang diberikan. Ada fungsi lain yang disebut getSquare() yang menggunakan test() dengan kata kunci hasil. Outputnya memberikan nilai kuadrat untuk rentang angka yang diberikan.

def test(n):
    return n*n

def getSquare(n):
    for i in range(n):
        yield test(i)

sq = getSquare(10)
for i in sq:
    print(i)

Keluaran:

0
1
4
9
16
25
36
49
64
81

Kapan menggunakan Yield Alih-alih Return dengan Python

Hasil Python3 kata kunci mengembalikan generator ke pemanggil dan eksekusi kode hanya dimulai ketika generator diulang.

Sebuah kembali dalam suatu fungsi adalah akhir dari eksekusi fungsi, dan satu nilai diberikan kembali ke pemanggil.

Di sini, adalah situasi ketika Anda harus menggunakan Yield alih-alih Return

Hasil vs. Kembali

Inilah perbedaan antara Yield dan Return

Hasil Kembali
Yield mengembalikan objek generator ke pemanggil, dan eksekusi kode hanya dimulai ketika generator diulang. Pengembalian dalam suatu fungsi adalah akhir dari eksekusi fungsi, dan satu nilai diberikan kembali ke pemanggil.
Saat fungsi dipanggil dan menemukan kata kunci hasil, eksekusi fungsi berhenti. Ini mengembalikan objek generator kembali ke pemanggil. Eksekusi fungsi hanya akan dimulai ketika objek generator dieksekusi. Saat fungsi dipanggil, eksekusi dimulai dan nilai dikembalikan ke pemanggil jika ada kata kunci kembali. Pengembalian di dalam fungsi menandai akhir dari eksekusi fungsi.
ekspresi hasil mengembalikan ekspresi
Tidak ada memori yang digunakan saat 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.
Kinerjanya lebih baik jika kata kunci hasil digunakan untuk ukuran data yang besar. Memori yang banyak digunakan jika ukuran datanya besar akan menghambat kinerjanya.
Waktu eksekusi lebih cepat jika hasil untuk ukuran data besar. Waktu eksekusi yang digunakan lebih lama karena ada pemrosesan ekstra yang dilakukan jika ukuran data Anda besar, itu akan berfungsi dengan baik untuk ukuran data kecil.

Ringkasan:


Python

  1. Fungsi Python Anonim/Lambda
  2. Generator Python
  3. Penutupan Python
  4. Dekorator Python
  5. Python String strip() Fungsi dengan CONTOH
  6. Panjang string python | len() metode Contoh
  7. Fungsi Python Lambda dengan CONTOH
  8. Python round() fungsi dengan CONTOH
  9. Python map() berfungsi dengan CONTOH
  10. Penghitung Python dalam Koleksi dengan Contoh