C’est fait exprès plus ou moins. Il vaut mieux montrer pleins de choses. Là j’ai cherché à être conçis pour bien montrer que ce n’est pas plus long. Et tu va voir c’est simple.
Exacte
Dans la majorité des langages quand on ouvre un fichier il faut le fermer. En python ça se fait ainsi :
fichier = open('path', 'r')
# ce que tu veux faire
fichier.close()
Mais ces dernières années une nouvelle technique se démocratise, elle consiste à créer un bloque d’instructions dans le quel seras ouvert le fichier et dès que l’on sort de ce bloque (et quelque soit la manière, donc même avec un exit par exemple), le fichier sera refermé. En python, ça se fait avec le mot clef with.
Ici l’intérêt est faible, il sert principalement à être plus concis : nous aurions besoin de 2 lignes supplémentaires pour faire la même chose sans :
def cut(char, index, path):
f = open(path, 'r')
ret [ line.split(char, index+1)[index] for line in f.readlines() ]
f.close()
return ret
Note que cela ne marche pas qu’avec les fichiers mais aussi d’autres types de ressources que l’on doit libérer après le traitement.
C’est comme en mathématiques : « On fait un truc pour tout line dans les lignes lues du fichier ». Ça crée une liste avec le résultat de truc pour chaque ligne.
Maintenant le truc :
- On prend la ligne (line) qu’on découpe sur char (line.split(char)) ça construit un tableau. Pour faire des économie de bouts de chandelles on limite la taille du tableau résultat à index+1 éléments (ainsi la méthode split n’aura pas à parcourir toute la chaîne avant de finir son traitement)* : line.split(char, index+1)
- On obtiens un tableau, on ne garde que l’élément index.
Voila je sais pas si j’ai était particulièrement claire.
- je vais détailler avec un exemple, prenons les deux instructions suivantes :
[code]>>> ‘c:o:u:c:o:u’.split(’:’)
[‘c’, ‘o’, ‘u’, ‘c’, ‘o’, ‘u’]
‘c:o:u:c:o:u’.split(’:’, 1)
[‘c’, ‘o:u:c:o:u’][/code]
La seconde fois (en principe) la méthode n’a pas besoin de parcourir l’ensemble de la chaîne “c:o:u:c:o:u” dès qu’elle rencotre le premier ‘:’ elle effectue la découpe et renvoie le résultat. Je dis ça il est tout de même probable qu’il ne fasse pas d’optimisation, je n’en sais rien, ça dépend même peut être de l’interpréteur que tu utilise.