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().