Python generatorlari


ULASHISH

Generatorlar

Generatorlar - bu ularning bajarilishini to‘xtatib turishi va davom ettirishi mumkin bo‘lgan funksiyalar.

Jeneratör funksiyasi chaqirilganda, u iterator bo‘lgan generator obyektini qaytaradi.

Funksiya ichidagi kod hali bajarilmagan, u faqat kompilyatsiya qilingan. Funksiya faqat generator ustida takrorlanganda ishlaydi.

Misol

Oddiy generator funksiyasi:

def my_generator():   yield 1   yield 2   yield 3 for value in my_generator():   print(value)
O‘zingiz sinab ko‘ring »

Generatorlar butun ma’lumotlar to‘plamini xotirada saqlamasdan ma’lumotlarni takrorlash imkonini beradi.

returndan foydalanish o‘rniga generatorlaryieldkalit so‘zidan foydalanadilar.


Yild kalit so‘zi

yieldkalit so‘zi funksiyani generatorga aylantiradi.

yieldga duch kelganda, funksiya holati saqlanadi va qiymat qaytariladi. Keyingi safar generator chaqirilganda, u to‘xtagan joydan davom etadi.

Misol

Raqamlarni chiqaradigan generator:

def count_up_to(n):   count = 1   while count <= n:     yield count     count += 1 for num in count_up_to(5):   print(num)
O‘zingiz sinab ko‘ring »

Funksiyani tugatadiganreturndan farqli o‘laroq,yielduni pauza qiladi va uni bir necha marta chaqirish mumkin.



Generatorlar xotirani saqlaydi

Generatorlar xotiradan tejamkor, chunki ular hamma narsani xotirada saqlash o‘rniga, o‘z vaqtida qiymatlarni hosil qiladi.

Katta ma’lumotlar to‘plami uchun generatorlar xotirani saqlaydi:

Misol

Katta ketma-ketliklar uchun generator:

def large_sequence(n):   for i in range(n):     yield i # This doesn't create a million numbers in memory gen = large_sequence(1000000) print(next(gen)) print(next(gen)) print(next(gen))
O‘zingiz sinab ko‘ring »

Generatorlar bilan next() dan foydalanish

next() funksiyasidan foydalanib, generator orqali qo‘lda takrorlashingiz mumkin:

Misol

def simple_gen():   yield "Emil"   yield "Tobias"   yield "Linus" gen = simple_gen() print(next(gen)) print(next(gen)) print(next(gen))
O‘zingiz sinab ko‘ring »

Boshqa qiymatlar qolmaganda, generator StopIteration istisnosini keltirib chiqaradi:

Misol

def simple_gen():   yield 1   yield 2 gen = simple_gen() print(next(gen)) print(next(gen)) print(next(gen)) # This will raise StopIteration
O‘zingiz sinab ko‘ring »

Generator ifodalari

Ro‘yxatdagi tushunchalarga o‘xshab, siz generatorlarni kvadrat qavslar o‘rniga qavslar bilan ifodalash orqali yaratishingiz mumkin:

Misol

Ro‘yxatni tushunish va generator ifodasi:

# List comprehension - creates a list list_comp = [x * x for x in range(5)] print(list_comp) # Generator expression - creates a generator gen_exp = (x * x for x in range(5)) print(gen_exp) print(list(gen_exp))
O‘zingiz sinab ko‘ring »

Misol

sum bilan generator ifodasidan foydalanish:

# Calculate sum of squares without creating a list total = sum(x * x for x in range(10)) print(total)
O‘zingiz sinab ko‘ring »

Fibonachchi ketma-ketlik generatori

Generatorlar Fibonachchi ketma-ketligini yaratish uchun ishlatilishi mumkin.

U xotira tugashisiz cheksiz qiymatlarni yaratishda davom etishi mumkin:

Misol

Generate 100 Fibonacci numbers:

def fibonacci():   a, b = 0, 1   while True:     yield a     a, b = b, a + b # Get first 100 Fibonacci numbers gen = fibonacci() for _ in range(100):   print(next(gen))
O‘zingiz sinab ko‘ring »

Generator usullari

Generatorlarda ilg‘or boshqaruvning maxsus usullari mavjud:

send() usuli

send() usuli generatorga qiymat yuborish imkonini beradi:

Misol

def echo_generator():   while True:     received = yield     print("Received:", received) gen = echo_generator() next(gen) # Prime the generator gen.send("Hello") gen.send("World")
O‘zingiz sinab ko‘ring »

close() usuli

close() usuli generatorni to‘xtatadi:

Misol

def my_gen():   try:     yield 1     yield 2     yield 3   finally:     print("Generator closed") gen = my_gen() print(next(gen)) gen.close()
O‘zingiz sinab ko‘ring »

W3Schools Pathfinder

Yutuqlaringizni kuzating – bu bepul!