web-dev-qa-db-fra.com

Quelle est la différence entre% s et% d dans le formatage de chaîne Python?

Je ne comprends pas ce que font %s et %d et comment ils fonctionnent.

97
karlzt

Ils sont utilisés pour formater des chaînes. %s agit comme un espace réservé pour une chaîne, alors que %d agit comme un espace réservé pour un nombre. Leurs valeurs associées sont transmises via un tuple à l'aide de l'opérateur %

name = 'marcog'
number = 42
print '%s %d' % (name, number)

imprimera marcog 42. Notez que nom est une chaîne (% s) et que nombre est un entier (% d pour la décimale).

Voir https://docs.python.org/3/library/stdtypes.html#printf-style-string-formatting pour des détails.

En Python 3, l'exemple serait:

print('%s %d' % (name, number))
146
marcog

%s est utilisé comme espace réservé pour les valeurs de chaîne que vous souhaitez injecter dans une chaîne formatée.

%d est utilisé comme espace réservé pour les valeurs numériques ou décimales.

Par exemple (pour Python 3)

print ('%s is %d years old' % ('Joe', 42))

Serait sortie

Joe is 42 years old
23
Soviut

Ce sont des espaces réservés:

Par exemple: 'Hi %s I have %d donuts' %('Alice', 42)

Cette ligne de code remplacera% s par Alice (str) et% d par 42.

Sortie: 'Hi Alice I have 42 donuts'

Cela pourrait être réalisé avec un "+" la plupart du temps. Pour mieux comprendre votre question, vous pouvez également vérifier {}/.format (). Voici un exemple: Formatage de chaîne Python:% vs. .format

voir également ici une vidéo du didacticiel Google Python @ 40 ', qui contient quelques explications https://www.youtube.com/watch?v=tKTZoB2Vjuk

11
kevin

à partir de python 3 doc

%d est pour l'entier décimal

%s est pour chaîne générique ou objet et dans le cas d'objet, il sera converti en chaîne

Considérons le code suivant

name ='giacomo'
number = 4.3
print('%s %s %d %f %g' % (name, number, number, number, number))

la sortie sera

giacomo 4.3 4 4.300000 4.3

comme vous pouvez le voir, %d sera tronqué en entier, %s conservera le formatage, %f sera imprimé en tant que float et %g sera utilisé pour le numéro générique

évidemment

print('%d' % (name))

va générer une exception; vous ne pouvez pas convertir une chaîne en nombre

10
venergiac

%d et %s sont des espaces réservés, ils fonctionnent comme une variable remplaçable. Par exemple, si vous créez 2 variables

variable_one = "Stackoverflow"
variable_two = 45

vous pouvez affecter ces variables à une phrase d'une chaîne à l'aide d'un tuple de variables.

variable_3 = "I was searching for an answer in %s and found more than %d answers to my question"

Notez que %s fonctionne avec String et %d avec des variables numériques ou décimales.

si vous imprimez variable_3 cela ressemblerait à ceci

print(variable_3 % (variable_one, variable_two))

Je cherchais une réponse dans StackOverflow et j'ai trouvé plus de 45 réponses à ma question.

9
Leo

Les "commandes" de formatage de chaîne %d et %s sont utilisées pour formater les chaînes. Le %d est destiné aux nombres et %s aux chaînes.

À titre d'exemple:

print("%s" % "hi")

et

print("%d" % 34.6)

Pour passer plusieurs arguments:

print("%s %s %s%d" % ("hi", "there", "user", 123456)) retournera hi there user123456

9
Stiffy2000

Ce sont des spécificateurs de format. Ils sont utilisés lorsque vous souhaitez inclure la valeur de vos expressions Python dans des chaînes, avec un format spécifique appliqué.

Voir Plongez dans Python pour une introduction relativement détaillée.

7
Lucas Jones

Au cas où vous voudriez éviter% s ou% d alors ..

name = 'marcog'
number = 42
print ('my name is',name,'and my age is:', number)

Sortie:

my name is marcog and my name is 42
2
Sujatha

en parlant de qui ... 
python3.6 est fourni avec f-strings, ce qui facilite grandement le formatage!
maintenant si votre version de python est supérieure à 3.6, vous pouvez formater vos chaînes avec les méthodes suivantes:

name = "python"

print ("i code with %s" %name)          # with help of older method
print ("i code with {0}".format(name))  # with help of format
print (f"i code with {name}")           # with help of f-strings
1
a_m_dev

Toutes ces réponses sont informatives, mais aucune n’entre vraiment dans le sens de la différence entre %s et %d.

%s indique au formateur d'appeler la fonction str() sur l'argument et, comme nous contraignons à définir une chaîne par définition, %s n'effectue essentiellement que str(arg).

%d d'autre part, appelle int() sur l'argument avant d'appeler str(), comme str(int(arg)), cela provoquera la contrainte int ainsi que str contrainte.

Par exemple, je peux convertir une valeur hexadécimale en décimal,

>>> '%d' % 0x15
'21'

ou tronquer un float.

>>> '%d' % 34.5
'34'

Mais l'opération déclenchera une exception si l'argument n'est pas un nombre.

>>> '%d' % 'thirteen'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: %d format: a number is required, not str

Donc, si l'intention est simplement d'appeler str(arg), alors %s suffit, mais si vous avez besoin d'une mise en forme supplémentaire (comme une mise en forme décimale flottante) ou d'une autre contrainte, les autres symboles de format sont nécessaires.

Avec la notation f-string, lorsque vous quittez le formateur, la valeur par défaut est str.

>>> a = 1
>>> f'{a}'
'1'
>>> f'{a:d}'
'1'
>>> a = '1'
>>> f'{a:d}'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: Unknown format code 'd' for object of type 'str'

La même chose est vraie avec string.format; la valeur par défaut est str.

>>> a = 1
>>> '{}'.format(a)
'1'
>>> '{!s}'.format(a)
'1'
>>> '{:d}'.format(a)
'1'
1
Wyrmwood

Selon les dernières normes, voici comment procéder.

print("My name is {!s} and my number is{:d}".format("Agnel Vishal",100))

Vérifiez python3.6 docs et exemple de programme

0
Agnel Vishal