Avere x.split(y)
sempre restituire un elenco di 1 + x.count(y)
elementi è una preziosa regolarità - come @ gnibbler sta già sottolineato rende split
e join
inverse esatte della vicenda (come, ovviamente, dovrebbero essere), ma anche le mappe con precisione la semantica di tutti i tipi di record delimitatore incollati ( come csv
le righe di file [[al netto dei problemi di citazione]], le righe di /etc/group
Unix e così via), consente (come menzionato nella risposta di @ Roman) facili controlli per (ad esempio) percorsi assoluti e relativi (nei percorsi dei file e negli URL), e così via.
Un altro modo per vederlo è che non dovresti lanciare volutamente informazioni fuori dalla finestra per nessun guadagno. Cosa si guadagnerebbe nel renderlo x.split(y)
equivalente a x.strip(y).split(y)
? Nulla, ovviamente - è facile da usare la seconda forma in cui questo è quello che vuoi dire, ma se il primo modulo è stato arbitrariamente considerato significare la seconda, che avresti avuto molto lavoro da fare quando si fa desidera che il primo ( che è tutt'altro che raro, come sottolinea il paragrafo precedente).
Ma in realtà, pensare in termini di regolarità matematica è il modo più semplice e generale in cui puoi insegnare a te stesso a progettare API passabili. Per fare un esempio diverso, è molto importante che per ogni valido x
e y
x == x[:y] + x[y:]
- che indica immediatamente perché un estremo di un'affettatura dovrebbe essere escluso. Più semplice è l'asserzione invariante che puoi formulare, più è probabile che la semantica risultante sia ciò di cui hai bisogno negli usi della vita reale - parte del fatto mistico che la matematica è molto utile nel trattare con l'universo.
Prova a formulare l'invariante per un split
dialetto in cui i delimitatori iniziali e finali sono in maiuscolo speciale ... controesempio: metodi di stringa come isspace
non sono massimamente semplici - x.isspace()
è equivalente a x and all(c in string.whitespace for c in x)
- quello stupido inizio x and
è il motivo per cui ti trovi così spesso a scrivere codice not x or x.isspace()
, per tornare alla semplicità che avrebbe dovuto essere progettata nei is...
metodi delle stringhe (per cui una stringa vuota "è" qualsiasi cosa tu voglia - contrariamente al senso del cavallo dell'uomo-in-strada, forse [[insiemi vuoti, come zero & c, hanno sempre confuso la maggior parte delle persone ;-)]], ma in piena conformità al buon senso matematico evidente e ben raffinato ! -).