Je ne comprends pas ce que font %s
et %d
et comment ils fonctionnent.
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))
%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
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
à 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
%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.
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
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.
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
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
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'
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