Ik begrijp niet wat %s
en %d
doen en hoe ze werken.
Antwoord 1, autoriteit 100%
Ze worden gebruikt voor het opmaken van tekenreeksen. %s
fungeert als tijdelijke aanduiding voor een tekenreeks terwijl %d
als tijdelijke aanduiding voor een getal fungeert. Hun bijbehorende waarden worden doorgegeven via een tuple met de operator %
.
name = 'marcog'
number = 42
print '%s %d' % (name, number)
drukt marcog 42
af. Merk op dat naam een tekenreeks (%s) is en getal een geheel getal (%d voor decimaal).
Zie https://docs.python.org /3/library/stdtypes.html#printf-style-string-formattingvoor details.
In Python 3 zou het voorbeeld zijn:
print('%s %d' % (name, number))
Antwoord 2, autoriteit 26%
van python 3 doc
%d
is voor decimaal geheel getal
%s
is voor een generieke tekenreeks of object en in het geval van een object wordt het geconverteerd naar tekenreeks
Denk aan de volgende code
name ='giacomo'
number = 4.3
print('%s %s %d %f %g' % (name, number, number, number, number))
de output zal zijn
giacomo 4,3 4 4,300000 4,3
zoals u kunt zien, wordt %d
afgekapt tot geheel getal, %s
behoudt de opmaak, %f
wordt afgedrukt als float en %g
wordt gebruikt voor algemeen nummer
uiteraard
print('%d' % (name))
zal een uitzondering genereren; je kunt tekenreeks niet naar getal converteren
Antwoord 3, autoriteit 18%
%s
wordt gebruikt als tijdelijke aanduiding voor tekenreekswaarden die u in een opgemaakte tekenreeks wilt invoegen.
%d
wordt gebruikt als tijdelijke aanduiding voor numerieke of decimale waarden.
Bijvoorbeeld (voor python 3)
print ('%s is %d years old' % ('Joe', 42))
Zou opleveren
Joe is 42 years old
Antwoord 4, autoriteit 10%
Dit zijn allemaal informatieve antwoorden, maar geen enkele raakt de kern van wat het verschil is tussen %s
en %d
.
%s
vertelt de formatter om de functie str()
op het argument aan te roepen en aangezien we per definitie een string afdwingen, %s
voert in wezen gewoon str(arg)
uit.
%d
daarentegen roept int()
aan op het argument voordat str()
wordt aangeroepen, zoals str(int(arg))
, Dit zal zowel int
dwang als str
dwang veroorzaken.
Ik kan bijvoorbeeld een hexadecimale waarde converteren naar decimaal,
>>> '%d' % 0x15
'21'
of kap een vlotter af.
>>> '%d' % 34.5
'34'
Maar de bewerking genereert een uitzondering als het argument geen getal is.
>>> '%d' % 'thirteen'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: %d format: a number is required, not str
Dus als het de bedoeling is om gewoon str(arg)
aan te roepen, dan is %s
voldoende, maar als je extra opmaak nodig hebt (zoals opmaak van zwevende decimalen) of andere dwang, dan zijn de andere formaatsymbolen nodig.
Met de f-string
notatie, als je de formatter weglaat, is de standaard 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'
Hetzelfde geldt voor string.format
; de standaard is str
.
>>> a = 1
>>> '{}'.format(a)
'1'
>>> '{!s}'.format(a)
'1'
>>> '{:d}'.format(a)
'1'
Antwoord 5, autoriteit 5%
Dit zijn tijdelijke aanduidingen:
Bijvoorbeeld: 'Hi %s I have %d donuts' %('Alice', 42)
Deze regel code vervangt %s door Alice (str) en %d door 42.
Uitvoer: 'Hi Alice I have 42 donuts'
Dit kan meestal worden bereikt met een “+”. Om uw vraag beter te begrijpen, kunt u {} / .format() ook controleren. Hier is een voorbeeld: Python-tekenreeksopmaak: % vs. .format
zie hier ook een google python tutorial video @ 40′, het heeft wat uitleg
https://www.youtube.com/watch?v=tKTZoB2Vjuk
Antwoord 6, autoriteit 5%
De %d
en %s
tekenreeksopmaak “commando’s” worden gebruikt om tekenreeksen op te maken. De %d
is voor getallen en %s
is voor tekenreeksen.
Voor een voorbeeld:
print("%s" % "hi")
en
print("%d" % 34.6)
Meerdere argumenten doorgeven:
print("%s %s %s%d" % ("hi", "there", "user", 123456))
retourneert hi there user123456
Antwoord 7, autoriteit 4%
%d
en %s
zijn tijdelijke aanduidingen, ze werken als een vervangbare variabele. Als u bijvoorbeeld 2 variabelen maakt
variable_one = "Stackoverflow"
variable_two = 45
je kunt die variabelen toewijzen aan een zin in een string met behulp van een tupel van de variabelen.
variable_3 = "I was searching for an answer in %s and found more than %d answers to my question"
Merk op dat %s
werkt voor String en %d
werkt voor numerieke of decimale variabelen.
als u variable_3
afdrukt, ziet het er zo uit
print(variable_3 % (variable_one, variable_two))
Ik was op zoek naar een antwoord in StackOverflow en vond meer dan 45 antwoorden op mijn vraag.
Antwoord 8, autoriteit 2%
Het zijn formaatspecificaties. Ze worden gebruikt wanneer u de waarde van uw Python-expressies in tekenreeksen wilt opnemen, waarbij een specifiek formaat wordt afgedwongen.
Zie Duik in Pythonvoor een relatief gedetailleerde introductie.
Antwoord 9, autoriteit 2%
Volgens de laatste normen, is dit hoe het moet.
print("My name is {!s} and my number is{:d}".format("Agnel Vishal",100))
Controleer de python3.6-documentenen voorbeeldprogramma
Antwoord 10
Als je %s of %d wilt vermijden, dan..
name = 'marcog'
number = 42
print ('my name is',name,'and my age is:', number)
Uitvoer:
my name is marcog and my name is 42
Antwoord 11
over welke …
python3.6 wordt geleverd met f-strings
wat het formatteren veel gemakkelijker maakt!
als je python-versie nu groter is dan 3.6, kun je je strings opmaken met deze beschikbare methoden:
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
Antwoord 12
%s wordt gebruikt om ruimte te houden voor string
%d wordt gebruikt om ruimte voor nummer vast te houden
name = "Moses";
age = 23
print("My name is %s am CEO at MoTech Computers " %name)
print("Current am %d years old" %age)
print("So Am %s and am %d years old" %(name,age))
Deze video gaat diep over die tip https://www.youtube.com/watch? v = 4ZN5YSUIQMA
Antwoord 13
Hier is het basisvoorbeeld om de Python String-formattering en een nieuwe manier te demonstreren om het te doen.
my_word = 'epic'
my_number = 1
print('The %s number is %d.' % (my_word, my_number)) # traditional substitution with % operator
// Het epische nummer is 1.
print(f'The {my_word} number is {my_number}.') # newer format string style
// Het epische nummer is 1.
beide drukken hetzelfde.