2014-04-09 19 views
8

Attualmente per aggiungere singole virgolette attorno a una stringa, la soluzione migliore che ho trovato è stata quella di realizzare una funzione wrapper di piccole dimensioni.Python 2.X aggiungendo virgolette singole attorno a una stringa

def foo(s1): 
    return "'" + s1 + "'" 

Esiste un modo più semplice e pietoso di farlo?

+2

Qual è il contesto (ragioni/perché) per farlo? Cosa succede se la stringa contiene citazioni? Comunque provate 's1 .__ repr __()' con varie stringhe e vediamo se questo comportamento si adatta al vostro uso richiesto. – metatoaster

+0

@metatoaster Fondamentalmente ho bisogno di concatenare molte stringhe '+', alcune che richiedono le virgolette singole e altre che non lo fanno, nel tentativo di conservare lo spazio linea ho trovato la soluzione di cui sopra – pyCthon

+1

Cosa succede se hai una stringa che corrisponde i vostri criteri di virgolette singole ma hanno anche una virgoletta singola (come 'that's'), usando il vostro metodo risulterebbe in' 'that's''. Questo è inteso/permesso per il tuo sistema? Inoltre, si raccomanda di usare 'str.join' su un elenco di stringhe piuttosto che usare' + 'per aggiungere singoli frammenti di stringhe, per motivi di prestazioni. – metatoaster

risposta

10

Ecco un'altra opzione (forse più divinatorio), utilizzando format strings:

def foo(s1): 
    return "'{}'".format(s1) 
12

Che dire:

def foo(s1): 
    return "'%s'" % s1 
+0

Questo è stato contrassegnato come un post di bassa qualità da Stackoverflow.Il commento è solo uno dei cookie standard di SO – Rico

+0

Questa sintassi per le stringhe di formato è stata deprecata, in favore dell'utilizzo del metodo 'format()' come mostrato nel mio answer –

+5

@Rico: Questa è ovviamente una risposta: in caso di dubbio, si prega di non rivedere e sicuramente non solo pubblicare commenti cookie cutter nel loro interesse. – BoltClock

8

Volevo solo mettere in evidenza ciò che @metatoaster detto nel commento di cui sopra, in quanto ho perso All'inizio.

L'uso di repr (stringa) aggiungerà virgolette singole, quindi virgolette doppie al di fuori di esse, quindi virgolette singole al di fuori di esse con virgolette singole interne sfuggite, quindi su altre escaping.

Utilizzando repr(), come un built-in, è più diretto, a meno che non ci sono altri conflitti ..

s = 'strOrVar' 
print s, repr(s), repr(repr(s)), ' ', repr(repr(repr(s))), repr(repr(repr(repr(s)))) 

# prints: strOrVar 'strOrVar' "'strOrVar'" '"\'strOrVar\'"' '\'"\\\'strOrVar\\\'"\'' 

Lo stato docs suo fondamentalmente repr stato(), vale a dire la rappresentazione, è il contrario di eval():

"per molti tipi, questa funzione fa un tentativo di restituire una stringa che produrrebbe un oggetto con lo stesso valore quando viene passato ad eval(), .."

I backquote sarebbero più brevi, ma sono removed in Python 3+. È interessante notare che StackOverflow utilizza le backquote per specificare gli intervalli di codice, invece di evidenziare un blocco di codice e fare clic sul pulsante del codice, tuttavia presenta alcuni comportamenti interessanti.

Problemi correlati