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ódemHH\uHHHH– kódový bod UnicodeHHHH
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.
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().