


Cara menggunakan iterator dan penjana dalam Python
1. Iterator (foreach)
1. Objek boleh lelar
Objek yang mempunyai kaedah __iter__
terbina dalam dipanggil objek boleh lelar.
Str, senarai, tuple, dict, set dan fail terbina dalam Python adalah semua objek boleh lelaran.
x = 1.__iter__ # SyntaxError: invalid syntax # 以下都是可迭代的对象 name = 'nick'.__iter__ print(type(name)) # 'method-wrapper'>
2. Objek Iterator
melaksanakan kaedah __iter__
objek boleh lelar, dan nilai pulangan yang diperoleh ialah objek lelaran.
Hanya rentetan dan senarai bergantung pada nilai indeks, manakala objek lelaran lain tidak boleh bergantung pada nilai indeks dan hanya boleh menggunakan objek lelaran.
mempunyai kaedah
__iter__
terbina dalam, dan melaksanakan kaedah ini akan mendapatkan iterator itu sendiri.Kaedah
__next__
terbina dalam, melaksanakan kaedah ini akan mendapat nilai dalam objek iterator.
s = 'hello' iter_s = s.__iter__() print(type(iter_s)) # 'str_iterator'> iter_s为迭代器对象 while True: try: print(iter_s.__next__()) except StopIteration: break #hello
3. Iterator mempunyai dua kaedah asas: iter() dan next().
s = 'hello' iter_s = iter(s) # 创建迭代器对象 print(type(iter_s)) # iter_s为迭代器对象 while True: try: print(next(iter_s)) # 输出迭代器的下一个元素 except StopIteration: break # hello
4. untuk gelung lelaran
Objek boleh lelar boleh dilalui terus menggunakan penyataan biasa
Gelung for dipanggil gelung lelaran, dan ia mesti boleh diulang selepas dalam objek.
#str name = 'nick' for x in name: print(x) #list for x in [None, 3, 4.5, "foo", lambda: "moo", object, object()]: print("{0} ({1})".format(x, type(x))) #dict d = { '1': 'tasty', '2': 'the best', '3 sprouts': 'evil', '4': 'pretty good' } for sKey in d: print("{0} are {1}".format(sKey, d[sKey])) #file f = open('32.txt', 'r', encoding='utf-8') for x in f: print(x) f.close()
5. Laksanakan iterator (__next__ dan __iter__)
Selepas melaksanakan kaedah __iter__() dan __next__() dalam kelas, anda boleh menggunakannya sebagai iterator untuk digunakan.
Kaedah __iter__() mengembalikan objek iterator khas yang melaksanakan kaedah __next__() dan menandakan selesainya lelaran melalui pengecualian StopIteration. Kaedah
__next__() mengembalikan objek lelaran seterusnya.
Pengecualian StopIteration digunakan untuk menandakan selesainya lelaran untuk mengelakkan gelung tak terhingga Dalam kaedah __next__(), kita boleh menetapkan pengecualian StopIteration untuk dicetuskan selepas melengkapkan bilangan gelung yang ditentukan. untuk menamatkan lelaran.
Buat iterator yang mengembalikan nombor Nilai awal ialah 1, secara beransur-ansur meningkat sebanyak 1 dan menghentikan pelaksanaan selepas 20 lelaran:
rreee1, julat simulasi<. 🎜 >class MyNumbers:
def __iter__(self):
self.a = 1
return self
def __next__(self):
if self.a <= 20:
x = self.a
self.a += 1
return x
else:
raise StopIteration
myclass = MyNumbers()
myiter = iter(myclass)
for x in myiter:
print(x)
Salin selepas log masuk
2. Jujukan Fibonacciclass MyNumbers: def __iter__(self): self.a = 1 return self def __next__(self): if self.a <= 20: x = self.a self.a += 1 return x else: raise StopIteration myclass = MyNumbers() myiter = iter(myclass) for x in myiter: print(x)
class Range:
def __init__(self, n, stop, step):
self.n = n
self.stop = stop
self.step = step
def __next__(self):
if self.n >= self.stop:
raise StopIteration
x = self.n
self.n += self.step
return x
def __iter__(self):
return self
for i in Range(1, 7, 3):
print(i)
#1
#4
Salin selepas log masuk
2. Penjana1. Penjana ialah fungsi khas yang mengembalikan lelaran dan hanya boleh digunakan untuk operasi lelaran. Dalam erti kata lain, penjana adalah lelaran. Semasa proses memanggil penjana, setiap kali ia menemui hasil, fungsi akan menjeda dan menyimpan semua maklumat semasa yang sedang berjalan, mengembalikan nilai hasil, dan meneruskan dari kedudukan semasa pada kali seterusnya () kaedah dijalankan. Panggil fungsi penjana dan kembalikan objek lelaran. class Range: def __init__(self, n, stop, step): self.n = n self.stop = stop self.step = step def __next__(self): if self.n >= self.stop: raise StopIteration x = self.n self.n += self.step return x def __iter__(self): return self for i in Range(1, 7, 3): print(i) #1 #4
hasil
boleh diikuti dengan berbilang nilai (boleh daripada sebarang jenis), tetapi nilai yang dikembalikan adalah daripada jenis tupel.Menyediakan cara untuk menyesuaikan iterator
- hasil boleh menjeda fungsi dan memberikan nilai pulangan semasa
- hasil dan pulangan:
class Fib: def __init__(self): self._a = 0 self._b = 1 def __iter__(self): return self def __next__(self): self._a, self._b = self._b, self._a + self._b return self._a f1 = Fib() for i in f1: if i > 100: break print('%s ' % i, end='') # 1 1 2 3 5 8 13 21 34 55 89
Salin selepas log masuk
- Perbezaan: pulangan hanya boleh mengembalikan nilai sekali; hasil boleh mengembalikan berbilang nilai
- Kaedah julat() tersuai
import sys def fibonacci(n): # 函数 - 斐波那契 a, b, counter = 0, 1, 0 while True: if counter > n: return yield a a, b = b, a + b counter += 1 f = fibonacci(10) #f 是一个生成器 print(type(f)) # 'generator'> while True: try: print(next(f), end=" ") except StopIteration: sys.exit()
def my_range(start, stop, step=1):
while start < stop:
yield start
start += 1
g = my_range(0, 3)
print(f"list(g): {list(g)}")
Salin selepas log masuk
3. Ungkapan penjana (i.for .in)Ganti [] dalam pemahaman senarai dengan () untuk mendapatkan Mod ekspresi penjana. Kelebihan: Berbanding dengan pemahaman senarai, ia boleh menjimatkan memori dan hanya menjana satu nilai dalam ingatan pada satu masa def my_range(start, stop, step=1): while start < stop: yield start start += 1 g = my_range(0, 3) print(f"list(g): {list(g)}")
def range(*args, **kwargs): if not kwargs: if len(args) == 1: count = 0 while count < args[0]: yield count count += 1 if len(args) == 2: start, stop = args while start < stop: yield start start += 1 if len(args) == 3: start, stop, step = args while start < stop: yield start start += step else: step = 1 if len(args) == 1: start = args[0] if len(args) == 2: start, stop = args for k, v in kwargs.items(): if k not in ['start', 'step', 'stop']: raise ('参数名错误') if k == 'start': start = v elif k == 'stop': stop = v elif k == 'step': step = v while start < stop: yield start start += step for i in range(3): print(i) # 0,1,2 for i in range(99, 101): print(i) # 99,100 for i in range(1, 10, 3): print(i) # 1,4,7 for i in range(1, step=2, stop=5): print(i) # 1,3 for i in range(1, 10, step=2): print(i) # 1,3,5,7,9
t = (i for i in range(10)) print(t) # <generator object at 0x00000000026907B0> print(next(t)) # 0 print(next(t)) # 1
Atas ialah kandungan terperinci Cara menggunakan iterator dan penjana dalam Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



PHP dan Python mempunyai kelebihan dan kekurangan mereka sendiri, dan pilihannya bergantung kepada keperluan projek dan keutamaan peribadi. 1.PHP sesuai untuk pembangunan pesat dan penyelenggaraan aplikasi web berskala besar. 2. Python menguasai bidang sains data dan pembelajaran mesin.

Python dan JavaScript mempunyai kelebihan dan kekurangan mereka sendiri dari segi komuniti, perpustakaan dan sumber. 1) Komuniti Python mesra dan sesuai untuk pemula, tetapi sumber pembangunan depan tidak kaya dengan JavaScript. 2) Python berkuasa dalam bidang sains data dan perpustakaan pembelajaran mesin, sementara JavaScript lebih baik dalam perpustakaan pembangunan dan kerangka pembangunan depan. 3) Kedua -duanya mempunyai sumber pembelajaran yang kaya, tetapi Python sesuai untuk memulakan dengan dokumen rasmi, sementara JavaScript lebih baik dengan MDNWebDocs. Pilihan harus berdasarkan keperluan projek dan kepentingan peribadi.

Docker menggunakan ciri -ciri kernel Linux untuk menyediakan persekitaran berjalan yang cekap dan terpencil. Prinsip kerjanya adalah seperti berikut: 1. Cermin digunakan sebagai templat baca sahaja, yang mengandungi semua yang anda perlukan untuk menjalankan aplikasi; 2. Sistem Fail Kesatuan (Unionfs) menyusun pelbagai sistem fail, hanya menyimpan perbezaan, menjimatkan ruang dan mempercepatkan; 3. Daemon menguruskan cermin dan bekas, dan pelanggan menggunakannya untuk interaksi; 4. Ruang nama dan cgroups melaksanakan pengasingan kontena dan batasan sumber; 5. Pelbagai mod rangkaian menyokong interkoneksi kontena. Hanya dengan memahami konsep -konsep teras ini, anda boleh menggunakan Docker dengan lebih baik.

Dalam kod VS, anda boleh menjalankan program di terminal melalui langkah -langkah berikut: Sediakan kod dan buka terminal bersepadu untuk memastikan bahawa direktori kod selaras dengan direktori kerja terminal. Pilih arahan Run mengikut bahasa pengaturcaraan (seperti python python your_file_name.py) untuk memeriksa sama ada ia berjalan dengan jayanya dan menyelesaikan kesilapan. Gunakan debugger untuk meningkatkan kecekapan debug.

Python cemerlang dalam automasi, skrip, dan pengurusan tugas. 1) Automasi: Sandaran fail direalisasikan melalui perpustakaan standard seperti OS dan Shutil. 2) Penulisan Skrip: Gunakan Perpustakaan Psutil untuk memantau sumber sistem. 3) Pengurusan Tugas: Gunakan perpustakaan jadual untuk menjadualkan tugas. Kemudahan penggunaan Python dan sokongan perpustakaan yang kaya menjadikannya alat pilihan di kawasan ini.

VS Kod adalah nama penuh Visual Studio Code, yang merupakan editor kod dan persekitaran pembangunan yang dibangunkan oleh Microsoft. Ia menyokong pelbagai bahasa pengaturcaraan dan menyediakan penonjolan sintaks, penyiapan automatik kod, coretan kod dan arahan pintar untuk meningkatkan kecekapan pembangunan. Melalui ekosistem lanjutan yang kaya, pengguna boleh menambah sambungan kepada keperluan dan bahasa tertentu, seperti debuggers, alat pemformatan kod, dan integrasi Git. VS Kod juga termasuk debugger intuitif yang membantu dengan cepat mencari dan menyelesaikan pepijat dalam kod anda.

Sambungan kod VS menimbulkan risiko yang berniat jahat, seperti menyembunyikan kod jahat, mengeksploitasi kelemahan, dan melancap sebagai sambungan yang sah. Kaedah untuk mengenal pasti sambungan yang berniat jahat termasuk: memeriksa penerbit, membaca komen, memeriksa kod, dan memasang dengan berhati -hati. Langkah -langkah keselamatan juga termasuk: kesedaran keselamatan, tabiat yang baik, kemas kini tetap dan perisian antivirus.

CentOS Memasang Nginx memerlukan mengikuti langkah-langkah berikut: memasang kebergantungan seperti alat pembangunan, pcre-devel, dan openssl-devel. Muat turun Pakej Kod Sumber Nginx, unzip dan menyusun dan memasangnya, dan tentukan laluan pemasangan sebagai/usr/local/nginx. Buat pengguna Nginx dan kumpulan pengguna dan tetapkan kebenaran. Ubah suai fail konfigurasi nginx.conf, dan konfigurasikan port pendengaran dan nama domain/alamat IP. Mulakan perkhidmatan Nginx. Kesalahan biasa perlu diberi perhatian, seperti isu ketergantungan, konflik pelabuhan, dan kesilapan fail konfigurasi. Pengoptimuman prestasi perlu diselaraskan mengikut keadaan tertentu, seperti menghidupkan cache dan menyesuaikan bilangan proses pekerja.
