Het verschil tussen %s en %d bij het formatteren van Python-strings

Datum:

Introductie

Tekenreeksopmaak is in eenvoudige bewoordingen het proces van het construeren van een tekenreeks door bepaalde specifieke of berekende gegevens in een tijdelijke aanduiding voor een tekenreeks in te voegen. Dit is een onmisbare tool als je te maken hebt met gebruiksvriendelijke uitvoer, het debuggen van logs of het genereren van dynamische tekst voor verschillende doeleinden.

Python biedt meerdere manieren om tekenreeksen op te maken. De drie primaire methoden zijn de opmaak in oude stijl met behulp van de % exploitant, de str.format() methode, die tot stand kwam in Python 2.6, en de modernste manier, f-snaren, geïntroduceerd in Python 3.6.

Terwijl f-snaren en str.format() heeft aan populariteit gewonnen vanwege hun expressiviteit en leesbaarheid, de % operator blijft een fundamentele methode, vooral in oudere codebases. Begrip %s en %d, twee fundamentele formaatspecificaties die worden gebruikt met de % operator, is een cruciale stap in het beheersen van de tekenreeksopmaak van Python.

In dit artikel gaan we dieper in op de %s en %d formaatspecificaties, met uitleg over hun verschillen, gebruik en hoe ze omgaan met verschillende gegevenstypen. Aan het einde van dit artikel heb je een goed begrip van deze cruciale aspecten van tekenreeksopmaak in Python.

%s vs %d: De basis

In Python, de % operator wordt gebruikt voor tekenreeksopmaak. Het interpreteert het linkerargument net als a printf-style opmaaktekenreeks die moet worden toegepast op het juiste argument, zodat u tekenreeksen op verschillende manieren kunt opmaken. Twee van de meest voorkomende formaatspecificaties die worden gebruikt met de % exploitant zijn %s en %d.

%s Formaatspecificatie

De %s formaatspecificatie is een tijdelijke aanduiding voor een snaar. De %s specifier converteert het object met behulp van str(), wat betekent dat het niet noodzakelijkerwijs een tekenreeks hoeft te zijn. Het kan elk Python-object zijn, zoals een nummer of zelfs een lijst. Python zal deze objecten automatisch converteren naar hun tekenreeksrepresentatie:

name = "Bob"
print("Hello, %s!" % name)

Dit geeft ons:

Hello, Bob!

%d Formaatspecificatie

Aan de andere kant, de %d formaatspecificatie is een tijdelijke aanduiding voor een decimaal geheel getal. De %d specifier vereist een geheel getal of een getal dat zonder verlies kan worden geconverteerd naar een geheel getal, zoals een boolean:

age = 25
print("I am %d years old." % age)

Dit resulteert in:

I am 25 years old.

Wanneer %s gebruiken

De %s formaatspecificatie is een van de meest veelzijdige in het stringopmaakarsenaal van Python. Omdat het impliciet het opgegeven object converteert naar een tekenreeks met behulp van de str() functie, wordt deze specificatie vaak gebruikt wanneer het exacte type object dat in de tekenreeks moet worden ingesloten, is onbekend of niet relevant.

Opmerking: Wanneer u gebruik maken van de %s formaatspecificatie met een niet-tekenreeksobject in Python, de str() functie wordt impliciet aangeroepen op dat object om het te converteren naar zijn tekenreeksrepresentatie. Dit betekent dat %s kan worden gebruikt om elk object op te maken, niet alleen strings.

Variabele gegevens

Als u variabele gegevens hebt die u als een tekenreeks moet weergeven, kunt u dit gebruiken %s. Dit kan een gebruikersnaam zijn, een bestandspad of andere informatie die tekstueel kan worden weergegeven, bijvoorbeeld:

username = "Bob"
print("Logged in user: %s" % username)

Dit levert ons op:

Logged in user: Bob

Niet-tekenreeksgegevens

Zelfs als uw gegevens geen string zijn, kunt u nog steeds gebruiken %s. Python converteert de gegevens automatisch naar de tekenreeksrepresentatie. Als u bijvoorbeeld een lijst wilt afdrukken als onderdeel van een tekenreeks:

fruits = ["apple", "banana", "cherry"]
print("Fruits: %s" % fruits)

Dit levert het volgende op:

Fruits: ['apple', 'banana', 'cherry']

Merk op hoe, sinds we de volledige array hebben doorgegeven, het ook de haakjes, komma's en weglatingstekens afdrukt.

Meerdere gegevenspunten

Als u meerdere gegevens in een tekenreeks wilt opmaken, kunt u meerdere gebruiken %s bestekschrijvers. U moet een tuple van gegevens die overeenkomen met het aantal %s bestekschrijvers:

username = "Bob"
access_level = "Admin"
print("User: %s, Access Level: %s" % (username, access_level))

Dit zal de username en access_level in de juiste volgorde in de uitvoertekenreeks:

User: Bob, Access Level: Admin

Vergeet niet: Terwijl %s is veelzijdig en gaat netjes om met verschillende gegevenstypen. Overweeg altijd of dit de meest geschikte optie is op basis van uw gegevenstype en specifieke gebruikssituatie. In sommige gevallen is het gebruik van een specifiekere indelingsspecificatie (zoals %d voor gehele getallen of %.2f voor getallen met drijvende komma met twee decimalen) kan meer controle geven over uw uitvoerformaat.

Wanneer %d te gebruiken

De %d formaatspecificatie wordt gebruikt wanneer u een geheel getal in een tekenreeks wilt insluiten. Het behandelt het argument als een decimaal (grondtal 10) geheel getal en kan een betrouwbaar hulpmiddel zijn bij het omgaan met numerieke gegevens bij het formatteren van tekenreeksen.

Opmerking: Terwijl %d is een uitstekend hulpmiddel voor het inbedden van gehele getallen in strings, het is cruciaal om op te merken dat het niet automatisch niet-gehele typen converteert. Bijvoorbeeld gebruiken %d met een getal met drijvende komma resulteert in a TypeError. Als u een getal met drijvende komma heeft, moet u dit eerst converteren naar een geheel getal, of een indelingsspecificatie gebruiken die is ontworpen voor getallen met drijvende komma, zoals %f or %.2f.

Bovendien, terwijl %d kan booleans opmaken, in de meeste gevallen met behulp van %s met een booleaanse waarde is mogelijk beter leesbaar tijdens het afdrukken True or False in plaats van 1 or 0. Houd daarom altijd rekening met de specifieke use-case en het gegevenstype waarmee u werkt bij het bepalen van de indelingsspecificatie.

Integer gegevens

Als u gehele gegevens heeft, zoals een leeftijd of een aantal, kunt u gebruiken %d om het in een string in te sluiten:

age = 25
print("I am %d years old." % age)

Bekijk onze praktische, praktische gids voor het leren van Git, met best-practices, door de industrie geaccepteerde normen en bijgevoegd spiekbriefje. Stop met Googlen op Git-commando's en eigenlijk leren het!

Als u dit uitvoert, resulteert dit in:

I am 25 years old.

Booleans

U kunt ook gebruik maken van %d met booleans. Python trakteert True as 1 en False as 0:

print("True is %d" % True)
print("False is %d" % False)

Zoals verwacht geeft dit ons:

True is 1
False is 0

Meerdere Integer-gegevenspunten

Als u te maken heeft met meerdere gegevenspunten met gehele getallen, kunt u er meerdere gebruiken %d specifiers en geef een tuple met bijbehorende waarden:

height = 180
weight = 75
print("My height is %d cm and my weight is %d kg." % (height, weight))

Wat resulteert in:

My height is 180 cm and my weight is 75 kg.

Fouten om te vermijden

De tekenreeksopmaak van Python is een krachtige functie, maar zoals bij elke krachtige tool is het belangrijk om deze correct te gebruiken om bugs te voorkomen en de leesbaarheid van uw code te behouden. Hieronder vindt u enkele van de meest voorkomende valkuilen die u tijdens het gebruik moet vermijden %s en %d.

Niet-overeenkomende formaatspecificaties

Zorg ervoor dat u de juiste indelingsspecificatie gebruikt voor het gegevenstype waarmee u werkt. Gebruik makend van %d met niet-gehele typen kan leiden tot fouten tijdens het gebruik %s met numerieke typen geeft u mogelijk niet de gewenste controle over het uitvoerformaat.

Onjuist aantal argumenten

Als u meerdere indelingsspecificaties gebruikt, zorg er dan voor dat u het juiste aantal argumenten opgeeft. Als het aantal formaatspecificaties in de tekenreeks niet overeenkomt met het aantal opgegeven argumenten, zal Python een verhogen TypeError:

print("My name is %s and I am %d years old." % ("Bob"))

Output:

TypeError: not enough arguments for format string

Onjuist gebruik van haakjes

Wanneer u meerdere argumenten opgeeft voor tekenreeksopmaak, moet u deze in een tuple plaatsen. Het vergeten van de haakjes kan leiden tot verwarrende fouten:

print("My name is %s and I am %d years old." % "Bob", 25)

Dit veroorzaakt de volgende fout:

TypeError: not all arguments converted during string formatting

Corrigeer het door haakjes toe te voegen:

print("My name is %s and I am %d years old." % ("Bob", 25))

gebruik % met woordenboeken

Bij gebruik van het % operator met woordenboeken, vergeet niet te gebruiken %(key)s or %(key)d om de sleutel in het woordenboek op te geven. Vergeten dit te doen kan leiden tot TypeError or KeyError:

data = {"name": "Bob", "age": 25}
print("My name is %s and I am %d years old." % data)

Output:

TypeError: not enough arguments for format string

Corrigeer het door de sleutels toe te voegen:

data = {"name": "Bob", "age": 25}
print("My name is %(name)s and I am %(age)d years old." % data)

Advies: Bij gebruik van tekenreeksopmaak in Python, duidelijkheid is de sleutel. Schrijf uw code op een manier die gemakkelijk te begrijpen is voor anderen en valideer uw invoer altijd voordat u ze doorgeeft aan de tekenreeksopmaak.

Conclusie

Het begrijpen van de nuances van tekenreeksopmaak in Python kan helpen bij de leesbaarheid van uw code, evenals bij uw vermogen om met verschillende gegevenstypen te werken. Zoals we hebben gezien, de %s en %d formaatspecificaties zijn handige hulpmiddelen voor het opnemen van respectievelijk string- en integer-gegevens in tekst.

%s converteert het gegeven object naar een string met behulp van de str() functie, waardoor het veelzijdig is voor elk gegevenstype, terwijl %d is specifiek voor gehele getallen. Het is belangrijk om ze op de juiste manier te gebruiken en veelvoorkomende fouten te vermijden, zoals niet-overeenkomende formaatspecificaties of een onjuist aantal argumenten.

Hoewel de % operator is een handige stringopmaakmethode, Python biedt andere technieken zoals f-strings, de str.format() methode en sjabloontekenreeksen, elk met hun eigen voordelen. De keuze van de tekenreeksopmaakmethode hangt grotendeels af van uw specifieke vereisten en persoonlijke voorkeur.

spot_img

Laatste intelligentie

spot_img