2.4. Strings¶
Uma string é uma sequência de caracteres Unicode escrita entre aspas. Aspas simples e aspas duplas são equivalentes – escolha o estilo que permite evitar o escape das 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"'
Strings com aspas triplas ("""...""" ou '''...''') se estendem por várias 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 comum, \ introduz um caractere especial:
\n– nova linha\t– tabulação\\– uma barra invertida literal\'/\"– aspas literais (quando, de outra forma, encerrariam a string)\xHH– o caractere 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á-lo uma string raw (bruta). As barras invertidas passam então a ser interpretadas literalmente – \n permanece com 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 + em um laço 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() retorna o número de caracteres em uma string. A indexação com [] retorna uma string de um caractere na posição indicada; índices negativos contam a partir do final:
>>> s = "OpenMV"
>>> len(s)
6
>>> s[0]
'O'
>>> s[-1]
'V'
Uma fatia s[start:stop] retorna a substring da posição start até, mas sem incluir, stop. Qualquer uma das extremidades pode ser omitida para significar “o início” ou “o fim”, e um terceiro valor opcional s[start:stop:step] permite pular caracteres.
As posições de fatia 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
Uma fatia fora do intervalo retorna silenciosamente qualquer porção que exista – s[100:200] é a string vazia "", não um erro. A indexação fora do intervalo, por outro lado, levanta IndexError.
2.4.4. Imutabilidade¶
Strings não podem ser modificadas no local. Operações que parecem alterar uma string na verdade retornam uma nova string e deixam a original intacta:
>>> name = "OpenMV"
>>> name.upper()
'OPENMV'
>>> name
'OpenMV' # unchanged
Para “alterar” uma string, vincule novamente o nome ao novo valor: name = name.upper().