2.4. Řetězce

Řetězec (string) je posloupnost znaků Unicode zapsaná v uvozovkách. Jednoduché a dvojité uvozovky jsou rovnocenné – zvolte ten styl, který vám umožní vyhnout se escapování uvozovek vyskytujících se uvnitř textu:

name    = "OpenMV Cam"
company = 'OpenMV, LLC'
message = "She said \"hi\""        # both styles can be used
same    = 'She said "hi"'

Řetězce v trojitých uvozovkách ("""...""" nebo '''...''') se mohou rozkládat přes více řádků a zachovávají znaky nového řádku doslovně:

banner = """boot ok
firmware v1.28
"""
print(banner)

Výstup:

boot ok
firmware v1.28

2.4.1. Escape sekvence

Uvnitř běžného řetězce \ uvozuje speciální znak:

  • \n – nový řádek

  • \t – tabulátor

  • \\ – doslovné zpětné lomítko

  • \' / \" – doslovná uvozovka (když by jinak ukončila řetězec)

  • \xHH – znak s hexadecimálním kódem HH

  • \uHHHH – kódový bod Unicode HHHH

Když řetězec obsahuje mnoho zpětných lomítek, předřaďte literálu r, čímž z něj uděláte raw řetězec. Zpětná lomítka se pak berou doslovně – \n zůstane dva znaky dlouhé namísto nahrazení znakem nového řádku:

win_path = r"C:\Users\OpenMV\camera.py"
literal  = r"\n is two characters, not a newline"

2.4.2. Spojování a opakování

Dva řetězce se spojí pomocí +; řetězec se opakuje pomocí *:

greeting = "Hello, " + name + "!"
line     = "-" * 40              # 40-character separator

Opakované + ve smyčce alokuje při každé iteraci nový řetězec. Pro sestavování větších řetězců z mnoha částí použijte str.join().

2.4.3. Délka, indexování a řezy

len() vrací počet znaků v řetězci. Indexování pomocí [] vrací jednoznakový řetězec na dané pozici; záporné indexy se počítají od konce:

>>> s = "OpenMV"
>>> len(s)
6
>>> s[0]
'O'
>>> s[-1]
'V'

Řez (slice) s[start:stop] vrací podřetězec od pozice start až po pozici stop (tu už nezahrnuje). Kterýkoli konec lze vynechat ve významu „od začátku“ nebo „do konce“ a volitelná třetí hodnota s[start:stop:step] umožňuje přeskakovat znaky.

Řetězec "OpenMV" s pozičními značkami mezi jednotlivými znaky, ilustrující, jak řez vybírá znaky mezi dvěma pozicemi.

Pozice řezů leží mezi znaky. s[2:5] vybírá znaky na pozicích 2, 3 a 4.

>>> s = "OpenMV"
>>> s[2:5]
'enM'
>>> s[:3]
'Ope'
>>> s[3:]
'nMV'
>>> s[::-1]
'VMnepO'                     # whole string, reversed

Řez mimo rozsah tiše vrátí tu část, která existuje – s[100:200] je prázdný řetězec "", nikoli chyba. Indexování mimo rozsah naopak vyvolá IndexError.

2.4.4. Neměnnost

Řetězce nelze upravovat na místě. Operace, které vypadají, jako by řetězec měnily, ve skutečnosti vrací nový řetězec a původní nechávají beze změny:

>>> name = "OpenMV"
>>> name.upper()
'OPENMV'
>>> name
'OpenMV'                     # unchanged

Chcete-li řetězec „změnit“, navažte jméno na novou hodnotu: name = name.upper().