Rumah > Artikel > pembangunan bahagian belakang > Bagaimana untuk membuat iterator dalam Python?
Apakah itu python
iterator? Mari kita ambil contoh paling mudah:
list1 = ["pdudo","juejin","hello"] tuple1 = ("pdudo","juejin","hello") dict1 = {"name":"pdudo"} for i in list1: print(i) for i in tuple1: print(i) for i in dict1: print(i)
Ini adalah python
lelaran Okey, itu sahaja, mari lakukannya secara manual.
Ya, menggunakan kaedah for...in
, lapisan bawah menggunakan iterator Adakah anda tidak pernah ingin tahu semasa anda menulis sebelum ini. Mengapa anda boleh menggunakannya untuk melintasi jenis data yang berbeza? for...in
iterator, anda boleh menggunakan python
untuk melintasi elemen, iaitu: for...in
Gunakan kod yang sama untuk melintasi bekas data yang berbeza. Saya rasa inilah puncanya.
dan c
untuk melintasi tatasusunan dan rentetan, dan kita akan mempunyai pemahaman yang jelas. python
dan rentetanc
dalam bahasa "pdudo","hello","juejin"
Kita perlu menulis nilai kritikal keadaan traversal diri kita sendiri. pdudohellojuejin
untuk menulis? Mari kita lihat. python
list1 = ["pdudo","hello","juejin"] char1 = "pdudohellojuejin" for v in list1: print(v) for c in char1: print(c)Anda hanya perlu mentakrif tatasusunan dan rentetan, kemudian gunakan
untuk menamatkannya. for...in
, ia memanggil objek for...in
, yang mengembalikan objek lelaran. Objek ini juga mentakrifkan kaedah inter()
, yang mengembalikan satu elemen bekas pada satu masa Apabila tiada lagi elemen boleh dikembalikan, pengecualian __next__()
akan dilemparkan untuk menunjukkan bahawa StopIteration
menamatkan gelung. for
list1 = ["pdudo","hello","juejin"] it = iter(list1) print(next(it)) print(next(it)) print(next(it)) print(next(it))Kod di atas mentakrifkan senarai yang nilainya ialah: "pdudo", "hello", "juejin", dan kemudian memanggil kaedah
, yang akan mengembalikan iterator, dan kemudian memanggil kaedah iter
untuk mengembalikan elemen seterusnya, tetapi panjang senarai yang kami takrifkan ialah 3, dan kaedah next
dipanggil 4 kali. Ia boleh dilihat pada kali terakhir pengecualian akan dilemparkan. next
, bekas for...in
juga dipanggil Objek, gunakan inter()
untuk mengembalikan objek boleh lelar seterusnya, dan seterusnya, sehingga pengecualian __next__
ditemui dan gelung berakhir. StopIteration
a = 9527 for i in a: print(i)Kami menggunakan
untuk melintasi jenis for...in
data. int
. __iter__
#!/bin/env python class flashBack: def __init__(self,list1): self.data = list1 self.index = len(list1)-1 def __iter__(self): return self def __next__(self): if self.index < 0: raise StopIteration val = self.data[self.index] self.index = self.index - 1 return val def main(): list1 = [1,2,3,4,5] tuble1 = ("pdudo","juejin","hello") for i in flashBack(list1): print(i) for i in flashBack(tuble1): print(i) if __name__ == '__main__': main()dilaksanakan, hasilnya ialah: Ia boleh dilihat bahawa untuk mencipta iterator, sekurang-kurangnya kaedah
dan kaedah __iter__
diperlukan. __next__
#!/bin/env python class Node: def __init__(self,val): self.val = val self.nextNode = None class Lists: def __init__(self,currentNodes): self.currentNode = currentNodes def __iter__(self): return self def __next__(self): if self.currentNode is None: raise StopIteration v = self.currentNode.val self.currentNode = self.currentNode.nextNode return v def main() : node1 = Node(1) node2 = Node(2) node3 = Node(3) node1.nextNode = node2 node2.nextNode = node3 for i in Lists(node1): print(i) if __name__ == '__main__': main()Seperti yang ditunjukkan dalam kod di atas, kami mula-mula mencipta nod
, yang mempunyai 2 nilai, Node
ialah nilai yang direkodkan dan val
ialah penunjuk untuk merekodkan yang seterusnya nextNode
, dan kemudian mentakrifkan kelas Node
, apabila memanggil, anda perlu memasukkan Lists
, ia akan menggunakan Node
untuk merakam currentNodes
semasa , ia akan mengembalikan Node
untuk memberitahu Peulang __next__
telah tamat, jika tidak, keluarkan StopIteration
nod semasa dan kembalikannya, dan luncurkannya ke nod seterusnya. for
val
Kod di atas, selepas dijalankan, hasilnya adalah seperti berikut:
Atas ialah kandungan terperinci Bagaimana untuk membuat iterator dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!