2012-12-02 9 views
14

Sto leggendo "Learn Python the Hard Way" e sono stato confuso dalla parte "script" della seconda riga.da sys import argv - qual è la funzione di "script"

from sys import argv 
script, filename = argv 

Da quello che ho capito, la seconda linea dice: script e filename comprendono argv. Ho provato a eseguire il mio codice senza la parte "script" e ha funzionato bene. Non sono sicuro di quale sia lo scopo.

+0

In realtà, non capisco la prima riga 'da sys'. Qualcuno potrebbe spiegarmelo? Sono nuovo di Python. –

+0

In realtà l'esecuzione del codice senza 'script' genera un errore ** TypeError: coercizione a Unicode: bisogno di stringhe o buffer, lista trovata ** –

risposta

13

In genere, il primo argomento per un eseguibile della riga di comando è il nome dello script e il resto sono gli argomenti previsti.

Qui, argv è un elenco che dovrebbe contenere due valori: il nome dello script e un argomento. Usando la notazione disimballaggio di Python, è possibile scrivere

script = argv[0] 
filename = argv[1] 

come

script, filename = argv 

mentre anche gettando errori se ci sono un numero inaspettato di argomenti (come uno o tre). Questa può essere una buona idea, a seconda del codice, perché garantisce anche che non ci siano argomenti inattesi.

Tuttavia, il seguente codice non si tradurrà in realtà filename contenente il nome del file:

filename = argv 

Questo perché filename è ora la lista degli argomenti. Per illustrare:

script, filename = argv 
print("Script:", script) # Prints script name 
print("Filename:", filename) # Prints the first argument 

filename = argv 
print("Filname:", filename) # Prints something like ["my-script.py", "my-file.txt"] 
2

Il primo elemento in argv è il nome dello script Python che si sta eseguendo. Eventuali argomenti aggiuntivi (il nome del file, in questo caso) sono argomenti passati a questo script.

A questi due argomenti vengono assegnati i nomi script e filename. È del tutto possibile che script non venga mai più utilizzato; è fondamentalmente un segnaposto. Se lo rimuovi, invece, dovresti farlo filename = argv[1].

4

Altri hanno spiegato che cosa è script, ma la dichiarazione di pitone si chiama unpacking e di solito è applicata a tuple o sequenze.

È un modo rapido per assegnare una variabile per ogni valore presente nella tupla (o sequenza) a destra del segno =.

Non è qualcosa di specifico per argv:

>>> a,b = ('Hello','World') 
>>> a 
'Hello' 
>>> b 
'World' 

Una cosa da tenere a mente è che il numero di variabili sul lato sinistro deve corrispondere al numero di elementi nella sequenza a destra, altrimenti si get:

>>> a,b,c = ('Hello','World') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: need more than 2 values to unpack 
>>> a,b = ('Hello','World','!') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: too many values to unpack 
2

argv è un elenco degli argomenti del programma. Il comportamento della shell standard include il nome del programma stesso come primo argomento in argv.

Python può assegnare più valori contemporaneamente se il numero di variabili sul lato sinistro è uguale alla dimensione dell'elenco sul lato destro (può anche gestire più casi, ma quello è il più semplice). Per esempio.

script, filename = argv 

è lo stesso di

script = argv[0] 
filename = argv[1] 

Si noti inoltre che lo script alzerà un ValueError se argv non ha esattamente due elementi.

Problemi correlati