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 hexadecimal HH

  • \uHHHH – o ponto de código Unicode HHHH

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.

A string "OpenMV" com marcadores de posição entre cada caractere, ilustrando como uma fatia seleciona os caracteres entre duas posições.

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