Wat is het verschil tussen %s en %d in de opmaak van Python-tekenreeksen?

Ik begrijp niet wat %sen %ddoen en hoe ze werken.


Antwoord 1, autoriteit 100%

Ze worden gebruikt voor het opmaken van tekenreeksen. %sfungeert als tijdelijke aanduiding voor een tekenreeks terwijl %dals 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 42af. 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

%dis voor decimaal geheel getal

%sis 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 %dafgekapt tot geheel getal, %sbehoudt de opmaak, %fwordt afgedrukt als float en %gwordt gebruikt voor algemeen nummer

uiteraard

print('%d' % (name))

zal een uitzondering genereren; je kunt tekenreeks niet naar getal converteren


Antwoord 3, autoriteit 18%

%swordt gebruikt als tijdelijke aanduiding voor tekenreekswaarden die u in een opgemaakte tekenreeks wilt invoegen.

%dwordt 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 %sen %d.

%svertelt de formatter om de functie str()op het argument aan te roepen en aangezien we per definitie een string afdwingen, %svoert in wezen gewoon str(arg)uit.

%ddaarentegen roept int()aan op het argument voordat str()wordt aangeroepen, zoals str(int(arg)), Dit zal zowel intdwang als strdwang 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 %svoldoende, maar als je extra opmaak nodig hebt (zoals opmaak van zwevende decimalen) of andere dwang, dan zijn de andere formaatsymbolen nodig.

Met de f-stringnotatie, 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 %den %stekenreeksopmaak “commando’s” worden gebruikt om tekenreeksen op te maken. De %dis voor getallen en %sis 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%

%den %szijn 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 %swerkt voor String en %dwerkt voor numerieke of decimale variabelen.

als u variable_3afdrukt, 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-stringswat 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))

Programma-uitvoer

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.

Other episodes