Voici un petit script qui verifie si un fichier finit par la bonne
extension:
EXT = [ ".c",".cpp",".cc"]
monfichier = "toto.c"
for ext in EXT :
if ( monfichier.endswith(ext)):
print " gagné"
break
Ma question (metaphysique) est:
Est il sage de sortir d'un 'for' avec 'break' ?
En C,C++ on m'a toujours dit que ce n'est pas bien (surtour si on
melange break, continu, return ..). Et qu'il faut mieux faire un while.
Du coup en python genre C++ je ferais:
trouve = False
i = 0
while ( not(trouve) and i <len(EXT)) :
if ( monfichier.endswith(EXT[i])):
print " gagné"
trouve = True
i = i + 1
Mais du coup ça force à passer par un index là ou on avait pas besoin.
Et je trouve ça moche.
Qu'en pensez vous?
Existe il des bouquins sur le bon usage du python ? regles de codages ? ...
En fait je fais une recherche sequentielle sur un tableau.
Peut existe il un methode find qui prendrait en parametre une fonction
de comparaison ?
a = List(1,2,3) print a print len(a) print type(a)
J'avoue que je ne vois pas de difference, donc ce que j'ai apprit c'est que on s'en fout ? (je sais pas pourquoi je pense que je dis une connerie)
La raison est très simple : s'il n'y a rien Python interprète return None, s'il y a return tout seul, pareil. Essayez avec un bon return True.
J'ai esseyer les 4 return (None,True,False,'rien') et aucunes difference.
D'autre part, je suis assez étonné que votre exemple fonctionne, alors que l'objet self n'est pas initialisé en tant que list
Si, a cause de l'étoile.
vous n'appelez pas __init__ de la classe de base. Néanmoins comparez : a = List((1, 2, 3)) " un seul argument == un tuple print a, list((1, 2, 3))
Cela depent de ce que je veux. Dans le cas ici, je ne veux que une initialisation du style List(1,2,3) et en aucun cas List((1,2,3)) voir même List(iterator).
a = List(1,2,3)
print a
print len(a)
print type(a)
J'avoue que je ne vois pas de difference, donc ce que j'ai apprit c'est
que on s'en fout ? (je sais pas pourquoi je pense que je dis une connerie)
La raison est très simple : s'il n'y a rien Python interprète return
None, s'il y a return tout seul, pareil. Essayez avec un bon return
True.
J'ai esseyer les 4 return (None,True,False,'rien') et aucunes difference.
D'autre part, je suis assez étonné que votre exemple fonctionne, alors
que l'objet self n'est pas initialisé en tant que list
Si, a cause de l'étoile.
vous n'appelez
pas __init__ de la classe de base. Néanmoins comparez :
a = List((1, 2, 3)) " un seul argument == un tuple
print a, list((1, 2, 3))
Cela depent de ce que je veux. Dans le cas ici, je ne veux que une
initialisation du style List(1,2,3) et en aucun cas List((1,2,3)) voir
même List(iterator).
a = List(1,2,3) print a print len(a) print type(a)
J'avoue que je ne vois pas de difference, donc ce que j'ai apprit c'est que on s'en fout ? (je sais pas pourquoi je pense que je dis une connerie)
La raison est très simple : s'il n'y a rien Python interprète return None, s'il y a return tout seul, pareil. Essayez avec un bon return True.
J'ai esseyer les 4 return (None,True,False,'rien') et aucunes difference.
D'autre part, je suis assez étonné que votre exemple fonctionne, alors que l'objet self n'est pas initialisé en tant que list
Si, a cause de l'étoile.
vous n'appelez pas __init__ de la classe de base. Néanmoins comparez : a = List((1, 2, 3)) " un seul argument == un tuple print a, list((1, 2, 3))
Cela depent de ce que je veux. Dans le cas ici, je ne veux que une initialisation du style List(1,2,3) et en aucun cas List((1,2,3)) voir même List(iterator).
-- Guillaume.
F. Petitjean
F. Petitjean wrote:
J'avoue que je ne vois pas de difference, donc ce que j'ai apprit c'est que on s'en fout ? (je sais pas pourquoi je pense que je dis une connerie)
La raison est très simple : s'il n'y a rien Python interprète return None, s'il y a return tout seul, pareil. Essayez avec un bon return True.
J'ai esseyer les 4 return (None,True,False,'rien') et aucunes difference.
Mettez à jour votre interpréteur Python, il y a une différence.
D'autre part, je suis assez étonné que votre exemple fonctionne, alors que l'objet self n'est pas initialisé en tant que list
Si, a cause de l'étoile.
Ce qui m'étonnait, c'est que l'attribut extend dans la première ligne du __init__ soit trouvé. Ce doit être la magie associée à __new__.
vous n'appelez pas __init__ de la classe de base. Néanmoins comparez : a = List((1, 2, 3)) " un seul argument == un tuple print a, list((1, 2, 3))
Cela depent de ce que je veux. Dans le cas ici, je ne veux que une initialisation du style List(1,2,3) et en aucun cas List((1,2,3)) voir même List(iterator).
Il me semble plus sûr de ne pas mettre d'__init__() du tout, et d'ajouter des attributs supplémentaires éventuels dans des méthodes spécifiques à votre application.
F. Petitjean wrote:
J'avoue que je ne vois pas de difference, donc ce que j'ai apprit c'est
que on s'en fout ? (je sais pas pourquoi je pense que je dis une connerie)
La raison est très simple : s'il n'y a rien Python interprète return
None, s'il y a return tout seul, pareil. Essayez avec un bon return
True.
J'ai esseyer les 4 return (None,True,False,'rien') et aucunes difference.
Mettez à jour votre interpréteur Python, il y a une différence.
D'autre part, je suis assez étonné que votre exemple fonctionne, alors
que l'objet self n'est pas initialisé en tant que list
Si, a cause de l'étoile.
Ce qui m'étonnait, c'est que l'attribut extend dans la première ligne du
__init__ soit trouvé. Ce doit être la magie associée à __new__.
vous n'appelez
pas __init__ de la classe de base. Néanmoins comparez :
a = List((1, 2, 3)) " un seul argument == un tuple
print a, list((1, 2, 3))
Cela depent de ce que je veux. Dans le cas ici, je ne veux que une
initialisation du style List(1,2,3) et en aucun cas List((1,2,3)) voir
même List(iterator).
Il me semble plus sûr de ne pas mettre d'__init__() du tout, et
d'ajouter des attributs supplémentaires éventuels dans des méthodes
spécifiques à votre application.
J'avoue que je ne vois pas de difference, donc ce que j'ai apprit c'est que on s'en fout ? (je sais pas pourquoi je pense que je dis une connerie)
La raison est très simple : s'il n'y a rien Python interprète return None, s'il y a return tout seul, pareil. Essayez avec un bon return True.
J'ai esseyer les 4 return (None,True,False,'rien') et aucunes difference.
Mettez à jour votre interpréteur Python, il y a une différence.
D'autre part, je suis assez étonné que votre exemple fonctionne, alors que l'objet self n'est pas initialisé en tant que list
Si, a cause de l'étoile.
Ce qui m'étonnait, c'est que l'attribut extend dans la première ligne du __init__ soit trouvé. Ce doit être la magie associée à __new__.
vous n'appelez pas __init__ de la classe de base. Néanmoins comparez : a = List((1, 2, 3)) " un seul argument == un tuple print a, list((1, 2, 3))
Cela depent de ce que je veux. Dans le cas ici, je ne veux que une initialisation du style List(1,2,3) et en aucun cas List((1,2,3)) voir même List(iterator).
Il me semble plus sûr de ne pas mettre d'__init__() du tout, et d'ajouter des attributs supplémentaires éventuels dans des méthodes spécifiques à votre application.
Guillaume Bouchard
F. Petitjean wrote:
J'ai esseyer les 4 return (None,True,False,'rien') et aucunes difference. Mettez à jour votre interpréteur Python, il y a une différence.
Oki, je note pour quand il sera à jour (python 2.3.5...)
Ce qui m'étonnait, c'est que l'attribut extend dans la première ligne du __init__ soit trouvé. Ce doit être la magie associée à __new__.
J'avoue que je n'en sais rien.
Il me semble plus sûr de ne pas mettre d'__init__() du tout, et d'ajouter des attributs supplémentaires éventuels dans des méthodes spécifiques à votre application.
Ok.
-- Guillaume.
F. Petitjean wrote:
J'ai esseyer les 4 return (None,True,False,'rien') et aucunes difference.
Mettez à jour votre interpréteur Python, il y a une différence.
Oki, je note pour quand il sera à jour (python 2.3.5...)
Ce qui m'étonnait, c'est que l'attribut extend dans la première ligne du
__init__ soit trouvé. Ce doit être la magie associée à __new__.
J'avoue que je n'en sais rien.
Il me semble plus sûr de ne pas mettre d'__init__() du tout, et
d'ajouter des attributs supplémentaires éventuels dans des méthodes
spécifiques à votre application.
J'ai esseyer les 4 return (None,True,False,'rien') et aucunes difference. Mettez à jour votre interpréteur Python, il y a une différence.
Oki, je note pour quand il sera à jour (python 2.3.5...)
Ce qui m'étonnait, c'est que l'attribut extend dans la première ligne du __init__ soit trouvé. Ce doit être la magie associée à __new__.
J'avoue que je n'en sais rien.
Il me semble plus sûr de ne pas mettre d'__init__() du tout, et d'ajouter des attributs supplémentaires éventuels dans des méthodes spécifiques à votre application.