Si vous vous souvenez, on ne peut pas mettre un antislash à la fin d’une raw string :
>>> print(r'Moi pouvoir\\') Moi pouvoir\\ >>> r'Moi pouvoir\\' 'Moi pouvoir\\\\' >>> r'Moi pouvoir\' File "<stdin>", line 1 r'Moi pouvoir\' ^ SyntaxError: EOL while scanning string literal |
La plupart du temps on s’en branle.
Mais supposons que vous vouliez créer un path pour disons, pauvre de vous, une commande DOS…
>>> print("\chemin\vers\dossier\dos\\") \chemin ers\dossier\dos\ >>> print(r"\chemin\vers\dossier\dos\\") \chemin\vers\dossier\dos\\ |
Ah, ah, te voilà bien baisé, cher programmeur !
Sauf que non, car une raw string n’est pas un type de string particulier, comme on l’a vu ici, donc on peut faire ça :
>>> print(r"\chemin\vers\dossier\dos" + "\\") \chemin\vers\dossier\dos\ |
Zooooo !
Et même si on se sent chaud, on peut utiliser la concaténation implicite pour se la jouer mega chaud du slip :
>>> print(r"\chemin\vers\dossier\dos" "\\") \chemin\vers\dossier\dos\ |
Qu’il en faut peu pour qu’un dev se sente le roi du monde…
l’implicite, c’est le mal… c’est marqué dans la PEP verset 20!
Mais bon, des fois ça évite d’en écrire des tonnes pour finalement pas grand chose…
Se sentir le roi du monde avec un path DOS, chacun sa came ^^.
Non, je ne me souviens pas. Je devrais ?
En l’occurrence la concaténation implicite est plutôt explicite, je trouve. D’ailleurs point de vue perf, c’est mieux que le + qui sera fait à l’exécution, la concaténation implicite sera faite au parsing. Oui, oui, ça n’a aucun effet visible, mais chacun se sent le roi du monde comme il peut. (En même temps je ne suis pas totalement certain de ne pas avoir dit une connerie. M’en fous, je suis le roi, je fais ce que je veux !)
C’est bon à savoir.
Par contre, si c’est juste pour gérer des chemins Windows, on s’en fout un peu. Ce superbe OS accepte également comme séparateur de répertoire, les suites d’antislash de longueur arbitraire.
Testé dans une console DOS, et ça marche :
C:\>dir Windows\\\\\\\\\\system\\\\\
Testé dans une console python, sous Windows :
A mon avis le plus simple reste quand même encore de se passer de raw string
Windows accepte autant les slashs que les antislashs pour ses chemins. ;)
De toute façon, il vaut mieux utiliser os.path.join non ?
Oui mais os.path.join ne rajoute pas de slash si il est absent à la fin.
@mothsART : reste aimable stp !
http://www.python.org/dev/peps/pep-3126/
J’ai dit une bêtise, le + entre deux chaînes statiques est déjà optimisé par CPython, donc pas de différence de performance (on négligera les deux caractères de plus à parser ^^). cf. le lien de Sdud;