2015-12-08 29 views
8

Fuori dei seguenti due varianti (con o senza segno più tra) di concatenazione di stringhe letterali:Varianti di concatenazione di stringhe?

  • Qual è il modo migliore?
  • Qual è la differenza?
  • Quando si dovrebbe usare l'uno o l'altro?
  • Nel caso in cui non vengono mai utilizzati, in caso affermativo, perché?
  • È preferibile il join?

Codice:

>>> # variant 1. Plus 
>>> 'A'+'B' 
'AB' 
>>> # variant 2. Just a blank space 
>>> 'A' 'B' 
'AB' 
>>> # They seems to be both equal 
>>> 'A'+'B' == 'A' 'B' 
True 
+2

Questa è una stringa * letterale * concatenazione. –

+0

Con stringhe letterali, non vi è alcuna differenza tra la giustapposizione e l'uso dell'operatore '+'. Con le variabili, la giustapposizione non è un'opzione. – khelwood

+0

Ho trovato un bell'articolo che potrebbe far luce su questo argomento per gli interessati: https://lwn.net/Articles/551426/ – UlfR

risposta

13

giustapponendo funziona solo per letterali stringa:

>>> 'A' 'B' 
'AB' 

Se si lavora con oggetti stringa:

>>> a = 'A' 
>>> b = 'B' 

è necessario utilizzare un metodo diverso :

>>> a b 
    a b 
    ^
SyntaxError: invalid syntax 

>>> a + b 
'AB' 

Il + è un po 'più ovvio che mettere letteralmente l'uno accanto all'altro.

Un uso del primo metodo è quello di dividere lunghi testi su più righe, mantenendo rientro nel codice sorgente:

>>> a = 5 
>>> if a == 5: 
    text = ('This is a long string' 
      ' that I can continue on the next line.') 
>>> text 
'This is a long string that I can continue on the next line.' 

''join() è il modo migliore per concatenare più stringhe, ad esempio in un elenco:

>>> ''.join(['A', 'B', 'C', 'D']) 
'ABCD' 
1

la variante senza + avviene durante l'analisi sintassi del codice. Credo che è stato fatto per far si scrive più stringhe di linea più belli di codice, in modo da poter fare:

test = "This is a line that is " \ 
     "too long to fit nicely on the screen." 

Credo che quando è possibile, si dovrebbe utilizzare la versione non-+, perché nel bytecode ci sarà essere solo la stringa risultante, nessun segno di concatenazione lasciato.

Quando si utilizza +, si dispone di due string nel codice e si esegue la concatenazione durante il runtime (a meno che gli interpreti non siano intelligenti e lo ottimizzino, ma non so se lo fanno).

Ovviamente, non si può fare: a = 'A' ba = 'B' una

Quale è più veloce? La versione no-+, perché è già stata eseguita prima dell'esecuzione dello script.

+ vs join -> Se si dispone di un sacco di elementi, join è preferito perché è ottimizzato per gestire molti elementi. L'utilizzo di + per concatenare più stringhe crea molti risultati parziali nella memoria di processo, mentre l'uso di join non lo fa.

Se hai intenzione di concatenare solo un paio di elementi, suppongo che + sia migliore in quanto è più leggibile.

+0

'" troppo lungo per adattarsi "- questa non è una sintassi valida –

+0

Sì, hai ragione, ho dimenticato il \ – Maciek