Ter x.split(y)
sempre retornado uma lista de 1 + x.count(y)
itens é uma regularidade preciosa - como @ gnibbler já apontou, ele faz split
e join
exatas inversos um do outro (como eles obviamente deveriam ser), ele também mapeia precisamente a semântica de todos os tipos de registros unidos por delimitadores ( como csv
linhas de arquivo [[net of Quoting Issues]], linhas de /etc/group
Unix, e assim por diante), permite (como a resposta de @ Roman mencionou) verificações fáceis para (por exemplo) caminhos absolutos vs relativos (em caminhos de arquivo e URLs), e assim por diante.
Outra maneira de ver isso é que você não deve jogar informações pela janela sem qualquer ganho. A que ganharíamos fazendo x.split(y)
equivalente a x.strip(y).split(y)
? Nada, é claro - é fácil de usar a segunda forma quando isso é o que você quer dizer, mas se a primeira forma foi arbitrariamente entender-se o segundo, você tem muito trabalho a fazer quando você não quer que o primeiro ( o que está longe de ser raro, como o parágrafo anterior indica).
Mas, na verdade, pensar em termos de regularidade matemática é a maneira mais simples e geral de aprender a projetar APIs passáveis. Para dar um exemplo diferente, é muito importante que, para qualquer x
e y
x == x[:y] + x[y:]
- o que indica imediatamente por que um extremo de um corte deve ser excluído. Quanto mais simples a afirmação invariável que você pode formular, mais provável é que a semântica resultante seja o que você precisa nos usos da vida real - parte do fato místico de que a matemática é muito útil para lidar com o universo.
Tente formular o invariante para um split
dialeto no qual os delimitadores iniciais e finais são casados especiais ... contra-exemplo: métodos de string como isspace
não são maximamente simples - x.isspace()
é equivalente a x and all(c in string.whitespace for c in x)
- aquele líder bobo x and
é o motivo pelo qual você tantas vezes se encontra codificando not x or x.isspace()
, para voltar à simplicidade que deveria ter sido projetada nos is...
métodos de string (em que uma string vazia "é" qualquer coisa que você quiser - ao contrário do senso comum do homem da rua, talvez [[conjuntos vazios, como zero & c, sempre confundi a maioria das pessoas ;-)]], mas em total conformidade com o óbvio bom senso matemático refinado ! -).