197 votes

Que signifie %s dans une chaîne de format Python ?

Qu'est-ce que %s signifie-t-il en Python ? Et que fait le bout de code suivant ?

Par exemple...

 if len(sys.argv) < 2:
     sys.exit('Usage: %s database-name' % sys.argv[0])

 if not os.path.exists(sys.argv[1]):
     sys.exit('ERROR: Database %s was not found!' % sys.argv[1])

5 votes

El % est déprécié au profit de l'opérateur plus puissant str.format méthode, voir PEP-3101 .

45 votes

En fait, cette PEP dit "Dans Python 3.0, l'opérateur % est complété par une méthode plus puissante de formatage des chaînes de caractères" et qu'elle est rétroportée vers Python 2.6. D'où je viens, "supplemented" signifie ajouté, pas remplacé. Le PEP ne dit pas "supplanté" et dans aucune partie du PEP il n'est dit que l'opérateur % est déprécié (pourtant il est dit que d'autres choses sont dépréciées en bas de page). Vous pouvez préférer str.format et c'est très bien, mais tant qu'il n'y a pas de PEP disant qu'il est déprécié, il n'y a aucun sens à prétendre qu'il l'est alors qu'il ne l'est pas.

236voto

Andrew Hare Points 159332

Il s'agit d'une syntaxe de formatage des chaînes de caractères (qu'elle emprunte au C).

Veuillez consulter "PyFormat" :

Python prend en charge le formatage des valeurs dans chaînes de caractères. Bien que cela puisse inclure des expressions très complexes, l'utilisation la plus l'utilisation la plus élémentaire consiste à insérer des valeurs dans une avec la fonction %s placeholder.

Voici un exemple très simple :

#Python 2
name = raw_input("who are you? ")
print "hello %s" % (name,)

#Python 3+
name = input("who are you? ")
print("hello %s" % (name,))

El %s me permet d'insérer (et éventuellement de formater) une chaîne de caractères. Remarquez que le %s est remplacé par ce que je passe à la chaîne de caractères après la balise % symbole. Remarquez également que j'utilise ici un tuple (lorsque vous n'avez qu'une seule chaîne de caractères, l'utilisation d'un tuple est facultative) pour illustrer le fait que plusieurs chaînes de caractères peuvent être insérées et formatées dans une seule instruction.

13 votes

Notez que ce type d'interpolation de chaîne de caractères est déprécié au profit de l'option plus puissante str.format méthode.

8 votes

Dans python3, raw_input() est maintenant simplement input() pour ceux d'entre vous qui essaient par eux-mêmes.

4 votes

Pourquoi (name,) et pas seulement name ?

137voto

katsh Points 2326

La réponse d'Andrew est bon.

Et pour vous aider un peu plus, voici comment utiliser la mise en forme multiple dans une chaîne :

"Hello %s, my name is %s" % ('john', 'mike') # Hello john, my name is mike".

Si vous utilisez des ints au lieu de chaînes, utilisez %d au lieu de %s.

"My name is %s and I'm %d" % ('john', 12) #My name is john and I'm 12

2 votes

Bien. %d vous évite de mouler str(int). une idée de la signification de %s et %d ? je pense que je m'en souviendrai comme string et digit.

3 votes

@user391339 signifie décimal :) ils sont tous ici docs.python.org/2/library/

1 votes

Je ne sais pas pour les versions antérieures, mais au moins pour la 3.6, cela fonctionne de la même manière même si vous utilisez %s sur des entiers, il sera simplement converti en chaîne de caractères.

33voto

dansalmo Points 3220

El format a été introduite dans Python 2.6. Elle est plus performante et pas beaucoup plus difficile à utiliser :

>>> "Hello {}, my name is {}".format('john', 'mike')
'Hello john, my name is mike'.

>>> "{1}, {0}".format('world', 'Hello')
'Hello, world'

>>> "{greeting}, {}".format('world', greeting='Hello')
'Hello, world'

>>> '%s' % name
"{'s1': 'hello', 's2': 'sibal'}"
>>> '%s' %name['s1']
'hello'

12 votes

Cette réponse serait améliorée si elle expliquait que la syntaxe de la question consistait à formater le texte et à puis a démontré la nouvelle méthode. De cette façon, elle pourrait se suffire à elle-même. Fournir un exemple équivalent à celui de la question serait également un plus.

14voto

Brandon E Taylor Points 10927

%s indique un type de conversion de chaîne de caractères lorsque vous utilisez les capacités de formatage des chaînes de caractères de Python. Plus précisément, %s convertit une valeur spécifiée en une chaîne de caractères en utilisant la fonction str() fonction. Comparez cela avec la %r qui utilise le type de conversion repr() pour la conversion des valeurs.

Jetez un coup d'œil à la documentation sur le formatage des chaînes de caractères .

7voto

bernie Points 44206

Pour répondre à votre deuxième question : Que fait ce code ?...

Il s'agit d'un code de vérification d'erreurs assez standard pour un script Python qui accepte des arguments en ligne de commande.

Donc le premier if se traduit par : si vous ne m'avez pas passé d'argument, je vais vous dire comment vous devriez me passer un argument à l'avenir, par exemple, vous verrez ceci à l'écran :

Usage: myscript.py database-name

Le prochain if vérifie si le 'nom de la base de données' que vous avez passé au script existe réellement sur le système de fichiers. Si ce n'est pas le cas, vous obtiendrez un message comme celui-ci :

ERROR : La base de données nom-base de données n'a pas été trouvée !

De la documentation :

argv[0] est le nom du script (il est système d'exploitation si dépend du système d'exploitation, qu'il s'agisse d'un chemin complet ou non). Si la commande a été exécutée en utilisant l'option de ligne de commande -c à l'option de ligne de commande l'interpréteur, argv[0] prend la valeur de la chaîne chaîne '-c'. Si aucun nom de script n'a été transmis à passé à l'interpréteur Python, argv[0] est la chaîne vide.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X