Bonjour,
j'ai une classe MonIter (tirée d'un exemple trouvé sur le web) qui doit me permettre d'itérer sur les n premiers entiers (n étant fournie en argument du constructeur à l'instanciation).
Pour être plus précis, dans mon cas réel, j'ai une classe GribFile (décrivant un certain format de fichier) qui permet d'itérer sur des objets de type GribMessage (correspondant à tous les messages d'un fichier)
J'ai fait une methode __setitem__ dont le but est pour chaque élément de l'itération d'affecter à la clé k la valeur v. J'itère donc sur ces valeurs. Seul problème, quand j'ai fini d'itérer, je ne peux plus réitérer.
J'ai lu des choses sur itertools.tee, mais je ne vois pas comment l'utiliser dans ce cas.
Voici le code :
Quelqu'un peut il m'éclairer ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 #!/usr/bin/python # -*- coding: utf-8 -*- from __future__ import print_function class MonIter(): current=0 def __init__(self,stop): self.stop=stop def __iter__(self) : return self def __setitem__(self,key,val): for i in self: print("si je pouvais sur le message "+str(i)+" je ferais : "+str(i)+"["+str(key)+"]"+str(val)) def next(self) : self.current+= 1 if self.current>self.stop: raise StopIteration if self.current == 5: print("Quoi déjà 5eme tour?") return self.current i1=MonIter(6) #for i in i1: # print(i) i1["truc"]="chose" for i in i1: # ca marche pas, je suis deja a la fin de l iteration a cause de mon passage dans __setitem__ lors de l'affectation precedente print(i)
Mon objectif est de pouvoir arriver à :
plutôt que :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 with GribFile(nomfichier) as g: g[k]=v # Affecte la valeur v aux cles k de chacun des messages contenus dans g for m in g # Boucle sur les messages # faire des super choses
Entre parenthèses je m'en sors très bien avec cette dernière syntaxe mais je préférerais la première (qui devrait faire exactement la même chose au final)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 with GribFile(nomfichier) as g: for m in g # Boucle sur les messages m[k]=v # faire des super choses
Merci
Partager