Zephyrnet-logotyp

Skillnaden mellan %s och %d i Python-strängformatering

Datum:

Beskrivning

Strängformatering, i enkla termer, är processen att konstruera en sträng genom att infoga vissa specifika eller beräknade data i en strängplatshållare. Detta är ett oumbärligt verktyg när du har att göra med användarvänliga utdata, felsökningsloggar eller genererar dynamisk text för olika ändamål.

Python erbjuder flera sätt att formatera strängar. De tre primära metoderna är den gamla formateringen med hjälp av % operatör, den str.format() metod, som kom till i Python 2.6, och det modernaste sättet, f-strängar, introducerad i Python 3.6.

Medan f-strängar och str.format() har vunnit popularitet på grund av sin uttrycksfullhet och läsbarhet % operatör förblir en grundläggande metod, särskilt inom äldre kodbaser. Förståelse %s och %d, två grundläggande formatspecifikationer som används med % operator, är ett avgörande steg för att bemästra Pythons strängformatering.

I den här artikeln går vi djupt in på %s och %d formatspecifikationer, som förklarar deras skillnader, användningar och hur de interagerar med olika datatyper. I slutet av den här artikeln har du en gedigen förståelse för dessa avgörande aspekter av strängformatering i Python.

%s vs %d: Det grundläggande

I Python, den % operatorn används för strängformatering. Det tolkar vänsterargumentet ungefär som ett printf-style format sträng som ska tillämpas på rätt argument, så att du kan formatera strängar på en mängd olika sätt. Två av de vanligaste formatspecifikationerna som används med % operatör är %s och %d.

%s Formatspecifikation

Smakämnen %s formatspecificeraren är en platshållare för en sträng. De %s specifier konverterar objektet med hjälp av str(), vilket betyder att det inte nödvändigtvis behöver vara en sträng. Det kan vara vilket Python-objekt som helst, till exempel ett nummer eller till och med en lista. Python kommer automatiskt att konvertera dessa objekt till deras strängrepresentation:

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

Detta kommer att ge oss:

Hello, Bob!

%d Formatspecifikation

Å andra sidan, %d formatspecificeraren är en platshållare för en decimaltal. De %d specifier kräver ett heltal eller ett tal som kan förlustfritt konverteras till ett heltal, som ett booleskt:

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

Detta kommer att resultera i:

I am 25 years old.

När ska du använda %s

Smakämnen %s format specifier är en av de mest mångsidiga i Pythons strängformateringsarsenal. Eftersom det implicit konverterar det angivna objektet till en sträng med hjälp av str() funktion, används denna specificator ofta när den exakta typen av objekt som ska bäddas in i strängen är okänd eller irrelevant.

Notera: När du använder %s formatspecifikator med ett icke-strängobjekt i Python, den str() funktion anropas implicit på det objektet för att konvertera det till dess strängrepresentation. Detta innebär att %s kan användas för att formatera vilket objekt som helst, inte bara strängar.

Variabel data

Om du har variabel data som du behöver representera som en sträng kan du använda %s. Detta kan inkludera en användares namn, en filsökväg eller annan information som kan representeras i text, till exempel:

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

Detta kommer att ge oss:

Logged in user: Bob

Icke-strängdata

Även om din data inte är en sträng kan du fortfarande använda %s. Python konverterar automatiskt data till dess strängrepresentation. Om du till exempel vill skriva ut en lista som en del av en sträng:

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

Detta kommer att mata ut följande:

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

Lägg märke till hur, sedan vi passerade hela arrayen, den skriver ut parenteser, kommatecken och apostrofer också.

Flera datapunkter

Om du vill formatera flera databitar till en sträng kan du använda flera %s specifikationer. Du måste tillhandahålla en tupel av data för att matcha antalet %s specifikationer:

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

Detta kommer att placera username och access_level i rätt ordning i utdatasträngen:

User: Bob, Access Level: Admin

Kom ihåg: Medan %s är mångsidig och hanterar olika datatyper elegant, överväg alltid om det är det mest lämpliga alternativet baserat på din datatyp och specifika användningsfall. I vissa fall använder du en mer specifik formatspecifikation (som %d för heltal eller %.2f för flyttal med två decimaler) kan ge mer kontroll över ditt utdataformat.

När ska %d användas

Smakämnen %d formatspecifikation används när du vill bädda in ett heltal i en sträng. Det behandlar argumentet som ett decimalt (bas 10) heltal och kan vara ett tillförlitligt verktyg när man hanterar numeriska data i strängformatering.

Notera: Medan %d är ett utmärkt verktyg för att bädda in heltal i strängar, det är viktigt att notera att det inte automatiskt konverterar icke-heltalstyper. Till exempel att använda %d med ett flyttal kommer att resultera i en TypeError. Om du har ett flyttal måste du först konvertera det till ett heltal eller använda en formatspecifikation utformad för flyttal, som t.ex. %f or %.2f.

Dessutom medan %d kan formatera booleaner, i de flesta fall, med hjälp av %s med en boolesk kan vara mer läsbar när den skrivs ut True or False istället för 1 or 0. Tänk därför alltid på det specifika användningsfallet och den datatyp du arbetar med när du bestämmer dig för formatspecifikationen.

Heltalsdata

Om du har heltalsdata, till exempel en ålder eller ett antal, kan du använda %d för att bädda in den i en sträng:

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

Kolla in vår praktiska, praktiska guide för att lära dig Git, med bästa praxis, branschaccepterade standarder och medföljande fuskblad. Sluta googla Git-kommandon och faktiskt lära Det!

Att köra detta kommer att resultera i:

I am 25 years old.

Booleans

Du kan också använda %d med booleaner. Python godsaker True as 1 och False as 0:

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

Som förväntat kommer detta att ge oss:

True is 1
False is 0

Flera heltalsdatapunkter

Om du har att göra med flera heltalsdatapunkter kan du använda flera %d specifikationer och ge en tupel med motsvarande värden:

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

Vilket resulterar i:

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

Misstag att undvika

Pythons strängformatering är en kraftfull funktion, men som med alla kraftfulla verktyg är det viktigt att använda det korrekt för att undvika buggar och bibehålla läsbarheten för din kod. Nedan listas några av de vanligaste fallgroparna att undvika vid användning %s och %d.

Felaktiga formatspecifikationer

Se till att du använder rätt formatspecifikation för den datatyp du arbetar med. Använder sig av %d med icke-heltalstyper kan leda till fel vid användning %s med numeriska typer kanske inte ger dig den önskade kontrollen över utdataformatet.

Felaktigt antal argument

När du använder flera formatspecifikationer, se till att du anger rätt antal argument. Om antalet formatspecifikationer i strängen inte matchar antalet angivna argument, kommer Python att höja en TypeError:

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

Produktion:

TypeError: not enough arguments for format string

Felaktig användning av parentes

När du anger flera argument för strängformatering måste du lägga dem i en tupel. Att glömma parenteserna kan leda till förvirrande fel:

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

Detta kommer att orsaka följande fel:

TypeError: not all arguments converted during string formatting

Rätta till det genom att lägga till parenteser:

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

Använda % med ordböcker

När du använder % operatör med ordböcker, kom ihåg att använda %(key)s or %(key)d för att ange nyckeln i ordboken. Att glömma att göra detta kan leda till TypeError or KeyError:

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

Produktion:

TypeError: not enough arguments for format string

Korrigera det genom att lägga till nycklarna:

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

Råd: När du använder strängformatering i Python, tydlighet är nyckeln. Skriv din kod på ett sätt som är lätt för andra att förstå, och validera alltid dina indata innan du skickar dem till strängformateringsoperationen.

Slutsats

Att förstå nyanserna av strängformatering i Python kan hjälpa till med läsbarheten för din torsk, såväl som din förmåga att arbeta med olika datatyper. Som vi har sett är %s och %d formatspecifikationer är användbara verktyg för att infoga sträng- och heltalsdata i text, respektive.

%s konverterar det givna objektet till en sträng med hjälp av str() funktion, vilket gör den mångsidig för alla datatyper, medan %d är specifik för heltal. Det är viktigt att använda dem på rätt sätt och undvika vanliga misstag, till exempel formatspecifikationer som inte matchar eller ett felaktigt antal argument.

Medan % operator är en användbar strängformateringsmetod, Python tillhandahåller andra tekniker som f-strängar, den str.format() metod och mallsträngar, var och en med sina egna fördelar. Valet av strängformateringsmetod beror till stor del på dina specifika krav och personliga preferenser.

plats_img

Senaste intelligens

plats_img