2.4. Strings¶
Uma string é uma sequência de caracteres Unicode escrita entre aspas. As aspas simples e as aspas duplas são equivalentes – escolha o estilo que evita ter de escapar as aspas que aparecem dentro do texto:
name = "OpenMV Cam"
company = 'OpenMV, LLC'
message = "She said \"hi\"" # both styles can be used
same = 'She said "hi"'
As strings entre aspas triplas ("""...""" ou '''...''') abrangem múltiplas linhas e preservam as quebras de linha literalmente:
banner = """boot ok
firmware v1.28
"""
print(banner)
Saída:
boot ok
firmware v1.28
2.4.1. Sequências de escape¶
Dentro de uma string normal, \ introduz um carácter especial:
\n– nova linha\t– tabulação\\– uma barra invertida literal\'/\"– uma aspa literal (quando de outra forma terminaria a string)\xHH– o carácter com o código hexadecimalHH\uHHHH– o ponto de código UnicodeHHHH
Quando uma string contém muitas barras invertidas, prefixe o literal com r para torná-la uma string raw. As barras invertidas são então tratadas literalmente – \n permanece como dois caracteres em vez de ser substituído por uma nova linha:
win_path = r"C:\Users\OpenMV\camera.py"
literal = r"\n is two characters, not a newline"
2.4.2. Concatenação e repetição¶
Duas strings são unidas com +; uma string é repetida com *:
greeting = "Hello, " + name + "!"
line = "-" * 40 # 40-character separator
O uso repetido de + num ciclo aloca uma nova string a cada iteração. Para construir strings maiores a partir de muitas partes, use str.join().
2.4.3. Comprimento, indexação e fatiamento¶
len() devolve o número de caracteres de uma string. A indexação com [] devolve uma string de um único carácter na posição indicada; índices negativos contam a partir do fim:
>>> s = "OpenMV"
>>> len(s)
6
>>> s[0]
'O'
>>> s[-1]
'V'
Um slice s[start:stop] devolve a substring desde a posição start até, mas não incluindo, stop. Qualquer das extremidades pode ser omitida para significar «o início» ou «o fim», e um terceiro valor opcional s[start:stop:step] permite saltar caracteres.
As posições do slice ficam entre os caracteres. s[2:5] seleciona os caracteres nas posições 2, 3 e 4.¶
>>> s = "OpenMV"
>>> s[2:5]
'enM'
>>> s[:3]
'Ope'
>>> s[3:]
'nMV'
>>> s[::-1]
'VMnepO' # whole string, reversed
Um slice fora do intervalo devolve silenciosamente a parte que existe – s[100:200] é a string vazia "", não um erro. A indexação fora do intervalo, por outro lado, lança IndexError.
2.4.4. Imutabilidade¶
As strings não podem ser modificadas no local. As operações que parecem modificar uma string devolvem na realidade uma nova string e deixam a original intacta:
>>> name = "OpenMV"
>>> name.upper()
'OPENMV'
>>> name
'OpenMV' # unchanged
Para «alterar» uma string, rebindamos o nome ao novo valor: name = name.upper().