Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Question philosophique ... ou pas !

13 réponses
Avatar
Fouff
Bien le bonjour à tous et toutes.

Une question me gène depuis un bon moment.
Dans du code que je vois, je trouve très souvent la mise en forme de chaine de caractères de la forme :
buf = "".join(("/Title (", title, ")\n"))
f.write(buf) # f étant un descripteur de fichier (ouvert en écriture).

Ma question maintenant :
Quel est l'interêt de ce
buf = "".join(...)
par rapport à un
buf = "/Title (", title, ")\n" ?

Voire éventuellement en question subsidiaire par rapport à un bon vieux
buf = "/Title (%s)\n" % title ?

Si quelqu'un à une réponse autre que 42 à me fournir, je lui en serais reconnaissant.
Merci d'avance
Fouff

3 réponses

1 2
Avatar
Eric Deveaud
Bruno Desthuilliers wrote:

propre, clair et concis
quoi que la forme canonique soit plutôt
buf = "/Title (%s)n" % ( title )
mais je chipote


uf = "/Title (%(title)s)n" % {'title': title }



uf = "/Title (%(title)s)n" % locals()


J'aime déja pas trop (question de gout personel) les formes avec les
dictionnaires, qui sont pourtant beaucoup plus lisibles qu'une succession de
variables qu'il faut suivre dnas le bon ordre je n'avait pas pensé au locals(),
va falloir que je m'habitue.

merci



Avatar
kib
Bonsoir !

Perso, je vois une explication possible : Le développeur ne sait pas, au
moment où il écrit le code, quel délimiteur il (devra) utiliser(a). Dès
lors, avec le code cité, il pourra très facilement modifier.

Exemples :

buf = ";".join(("/Title (", title, ")n"))
buf = "t".join(("/Title (", title, ")n"))
buf = " - ".join(("/Title (", title, ")n"))
buf = "|".join(("/Title (", title, ")n"))

Maintenant, est-ce que cette hypothèse est la bonne ?






Je ne pense pas car alors on pourrait tout aussi bien faire ça par

concaténation et changer DELIM en ce qu'on veut:

DELIM = ";"
bug = "/Title (" + DELIM + title + DELIM + ")n"

Avatar
Laurent Pointal
Le Wed, 24 Oct 2007 14:12:46 +0200, Fouff a écrit :

Bien le bonjour à tous et toutes.

Une question me gène depuis un bon moment. Dans du code que je vois, je
trouve très souvent la mise en forme de chaine de caractères de la forme
:
buf = "".join(("/Title (", title, ")n")) f.write(buf) # f étant un
descripteur de fichier (ouvert en écriture).

Ma question maintenant :
Quel est l'interêt de ce
buf = "".join(...)


C'est un idiome Python connu, qui fonctionne, et tout développeur Python
sait (devrais savoir) que ça permet de concaténer simplement une séquence
de chaînes de caractères.

par rapport à un
buf = "/Title (", title, ")n" ?


Là tu crée un tuple, le f.write(buf) échouera:
TypeError: argument 1 must be string or read-only character buffer, not
tuple


Voire éventuellement en question subsidiaire par rapport à un bon vieux
buf = "/Title (%s)n" % title ?


Perso, s'il n'y a qu'un titre à insérer dans une chaîne, je préfèrerais
cette forme. Le "".join() est plus adapté lorsque tu constitue
dynamiquement une séquence de chaînes.

Si quelqu'un à une réponse autre que 42 à me fournir, je lui en serais
reconnaissant. Merci d'avance
Fouff


43.




--
Laurent POINTAL -

1 2