2009-06-15 26 views
113

Cosa significa% s in Python? E cosa fa il seguente bit di codice?Che cosa significa% s in Python?

Per esempio ...

if len(sys.argv) < 2: 
    sys.exit('Usage: %s database-name' % sys.argv[0]) 

if not os.path.exists(sys.argv[1]): 
    sys.exit('ERROR: Database %s was not found!' % sys.argv[1]) 
+3

L'operatore '%' è deprecato in favore del più potente metodo 'str.format', si veda [PEP-3101] (http://docs.python.org/3.1/whatsnew/2.6.html#pep -3101). –

+20

realtà che PEP dice "In Python 3.0, l'operatore% è integrata da un più potente metodo di formattazione stringa" e che sia backported a Python 2.6. da dove vengo io "integrato" significa aggiunto, non sostituiti. Il PEP non dice "soppiantato" e in nessuna parte del PEP si dice che l'operatore% è deprecato (eppure dice che altre cose sono deprecate in fondo). Potresti preferire str.format e va bene, ma finché non c'è un PEP che dice che è deprecato non ha senso pretendere che sia quando non lo è. – Ben

risposta

138

è una stringa di formattazione sintassi (da cui riprende C).

Vedere "Formatting Strings":

Python supporta i valori di formattazione in stringhe. Sebbene questo possa includere espressioni molto complicate, il massimo è l'inserimento di valori in una stringa con il segnaposto %s.

Edit: Ecco un esempio molto semplice:

name = raw_input("who are you?") 
print "hello %s" % (name,) 

Il %s gettone mi permette di inserire (e potenzialmente formato) una stringa. Si noti che il token %s viene sostituito da quello che si passa alla stringa dopo il simbolo %. Nota anche che sto usando una tupla anche qui (quando hai solo una stringa che usa una tupla è opzionale) per illustrare che più stringhe possono essere inserite e formattate in un'unica istruzione.

+0

Grazie a tutti e due. molto utile! – Tyler

+0

formattazione stringhe collegamento è andato – Sherlock

+5

nota che questo tipo di interpolazione stringa è deprecato a favore del più potente metodo 'str.format'. –

8

'% s' indica un tipo di conversione di 'stringa' quando si utilizzano le funzionalità di formattazione di stringhe di python. Più specificamente, '% s' converte un valore specificato in una stringa usando la funzione str(). Confrontalo con il tipo di conversione '% r' che usa la funzione repr() per la conversione del valore.

Date un'occhiata al seguente: http://docs.python.org/library/stdtypes.html#string-formatting-operations

5

In risposta alla tua seconda domanda: Che cosa significa questo codice fare ...

Questo è il codice di controllo degli errori abbastanza standard per uno script Python che? accetta argomenti da riga di comando.

Quindi la prima istruzione if si traduce in: se non mi hai passato un argomento, ti dirò come passare un argomento in futuro, ad es. vedrete questa schermata on-:

Usage: myscript.py database-name 

I successivi controlli if istruzione per vedere se il 'nome-database' avete passato allo script esiste realmente sul filesystem. In caso contrario, si otterrà un messaggio come questo:

ERROR: Database database-name was not found! 

Dal documentation:

argv [0] è il nome dello script (è sistema operativo dipende se questo è un pieno percorso o no). Se il comando è stato eseguito utilizzando l'opzione della riga di comando -c nell'interprete , argv [0] è impostato sulla stringa "-c". Se nessun nome di script è stato passato all'interprete Python, argv [0] è la stringa vuota.

75

risposta di Andrew è buona.

E proprio per aiutarvi a uscire un po 'di più, ecco come si utilizza la formattazione multiplo in una stringa

"Hello %s, my name is %s" % ('john', 'mike') # Hello john, my name is mike". 

Se si utilizza int invece di stringa, utilizzare% d al posto di% s.

"My name is %s and i'm %d" % ('john', 12) #My name is john and i'm 12 
+2

bello. % d ti salva dal cast str (int). Qualche idea su cosa significano% s e% d? Immagino che li ricorderò come stringa e cifra. – user391339

+0

@ user391339 sta per decimali :) sono tutti qui https://docs.python.org/2/library/stdtypes.html#string-formatting-operations – sqram

16

Il metodo format è stato introdotto in Python 2.6. È più capace e non molto più difficile da usare:

>>> "Hello {}, my name is {}".format('john', 'mike') 
'Hello john, my name is mike'. 

>>> "{1}, {0}".format('world', 'Hello') 
'Hello, world' 

>>> "{greeting}, {}".format('world', greeting='Hello') 
'Hello, world' 
+5

Questa risposta sarebbe migliorata se ha spiegato che la sintassi nella la domanda era la formattazione del testo e _questo_ dimostrò il metodo più recente. In questo modo potrebbe reggersi da solo. Fornire un esempio equivalente all'esempio nella domanda sarebbe anche un vantaggio. –

2

L'% s è noto come un identificatore di formato, in particolare per le stringhe. Mentre la discussione sui tipi di dati continua in tutto questo libro, dai uno sguardo a molti altri, ciascuno specifico per il suo tipo di dato dato. Ogni specificatore funge da segnaposto per quel tipo nella stringa; e dopo la stringa, il segno% fuori della stringa indica che dopo, tutti i valori da inserire nel formato specificatore sarà presentato qui per essere usate nella stringa. Si può notare la parentesi. Questo dice alla stringa che dovrebbe aspettarsi di vedere una sequenza che contiene i valori che devono essere usati dalla stringa per popolare i suoi specificatori di formato. Un modo più semplice per pensarci è immaginare che% s sia un raccoglitore che contiene il valore nelle parentesi . Se si vuole fare più di un valore, si dovrebbe semplicemente aggiungere un altro identificatore di formato, in questo modo:
">>>" John% s% s" % ("Ognuno", "Uomo")
John Everyman '