Trädvy Permalänk
Medlem
Registrerad
Feb 2014

python 3 <3

Tjabba tjenare

undrar hur man skriver backslash \ och citationstecken " inuti python 3 då man printar något

Trädvy Permalänk
Medlem
Plats
Upplands Väsby
Registrerad
Jul 2001

Du använder backslash som escape-character. Så ett backslash blir \\ och ett citationstecken blir \"

i7 7770K @ 4,7 GHz med Noctua NH-D15. 16GB corsair. Asus Prime Z270-P. GTX 1070 @ 2100 / 8500. Samsung 960 EVO nvme. Dell Ultrasharp 2560x1440. Fractal R4. Antec 650Watt PSU.
Logitech G900. Logitech K65.

Trädvy Permalänk
Forumledare
Registrerad
Okt 2002

Python kan använda antingen apostrof eller citationstecken som strängavgränsare, och det "andra" tecknet behöver då inte specialbehandlas.

>>> print('Denna "sträng" är \'OK\'!') Denna "sträng" är 'OK'! >>> print("Denna 'sträng' är \"OK\"!") Denna 'sträng' är "OK"!

Vad gäller backslash så används det som nämnts ovan vanligen för att indikera vissa speciella tecken, så som

  • '\n': ny rad

  • '\t': tabb

  • '\\': backslash själv

där den sista varianten är till för att skriva en explicit backslash utan att tolka efterföljande tecken som en modifierare. En lurig grej är annars att om man skriver en backslash som inte följs av en giltig modifierare så försöker Python vara snällt och tolkar det då "literalt", vilket gör att den som inte vet vad som pågår kan bli överraskad:

>>> print('\hej') \hej >>> print('\nej') ej

2. Lexical analysis → 2.4. Literals → 2.4.1. String and Bytes literals i Python-dokumentationen ger hela listan av dessa modifierare.

Dock är det rätt sällan behovet att skriva backslash i strängar mot användaren dyker upp. Däremot är det väldigt vanligt när man skriver exempelvis reguljära uttryck. För att inte göra dessa än mer oläsbara än vad de av naturen ändå lätt är så kan man ange att en sträng är "rå" genom prefixet r, vilket gör att backslashsekvenser inte tolkas däri (kortfattat sagt; läs om "raw strings" i manualen för mer exakt info):

>>> print(r'\nej') \nej

Detta bör man använda för reguljära uttryck då det är praxis och underlättar, men troligen inte på speciellt många andra ställen.

Tillägg: Kan lika gärna passa på att nämna en ytterligare mekanism som Python erbjuder för att beteckna stränger: trippla apostrofer/citationstecken. En sträng som avgränsas på detta sätt kan till skillnad från tidigare nämnda varianter innehålla faktiska radbrytningar, och dessutom behöver enkla apostrofer/citationstecken inte specialbehandlas i något av fallen:

>>> print('''Denna "sträng" är 'OK'!''') Denna "sträng" är 'OK'! >>> print("""Denna "sträng" är 'OK'!""") Denna "sträng" är 'OK'! >>> print('''Vi kan även ... byta rad ... mitt i en sådan sträng''') Vi kan även byta rad mitt i en sådan sträng

I praktiken används dessa trippelavgränsade strängar främst i docstrings.

Tillägg om trippelavgränsade strängar.

Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.

Trädvy Permalänk
Medlem
Registrerad
Feb 2014
Skrivet av phz:

Python kan använda antingen apostrof eller citationstecken som strängavgränsare, och det "andra" tecknet behöver då inte specialbehandlas.

>>> print('Denna "sträng" är \'OK\'!') Denna "sträng" är 'OK'! >>> print("Denna 'sträng' är \"OK\"!") Denna 'sträng' är "OK"!

Vad gäller backslash så används det som nämnts ovan vanligen för att indikera vissa speciella tecken, så som

  • '\n': ny rad

  • '\t': tabb

  • '\\': backslash själv

där den sista varianten är till för att skriva en explicit backslash utan att tolka efterföljande tecken som en modifierare. En lurig grej är annars att om man skriver en backslash som inte följs av en giltig modifierare så försöker Python vara snällt och tolkar det då "literalt", vilket gör att den som inte vet vad som pågår kan bli överraskad:

>>> print('\hej') \hej >>> print('\nej') ej

2. Lexical analysis → 2.4. Literals → 2.4.1. String and Bytes literals i Python-dokumentationen ger hela listan av dessa modifierare.

Dock är det rätt sällan behovet att skriva backslash i strängar mot användaren dyker upp. Däremot är det väldigt vanligt när man skriver exempelvis reguljära uttryck. För att inte göra dessa än mer oläsbara än vad de av naturen ändå lätt är så kan man ange att en sträng är "rå" genom prefixet r, vilket gör att backslashsekvenser inte tolkas däri (kortfattat sagt; läs om "raw strings" i manualen för mer exakt info):

>>> print(r'\nej') \nej

Detta bör man använda för reguljära uttryck då det är praxis och underlättar, men troligen inte på speciellt många andra ställen.

Tack så mycket för informationen, uppskattar verkligen att du tog tiden att skriva ett så utförligt svar. <3