2012-12-02 18 views
14

işlevinin ne "Hard Way Python bilgi" ve ikinci hattın "script" bölümü tarafından kafası karışmıştı. Anladığım kadarıyla- "script" Okuyorum

from sys import argv 
script, filename = argv 

, ikinci satır diyor ki: script ve filenameargv içermektedir. Ben "script" parçası olmadan benim kod çalıştıran çalıştı ve gayet güzel çalıştı. Bunun amacının ne olduğundan emin değilim. argv yılında

+0

Aslında, sys'den ilk satırı anlamadım. Birisi bana açıklayabilir mi? Python için yeniyim. –

+0

Aslında kod "script" olmadan çalıştırıldığında bir hata atılıyor ** TypeError: Unicode'a kodlama: string veya buffer'a ihtiyaç var, liste bulundu ** –

cevap

13

Genellikle, bir komut satırı yürütülebilir İlk argüman komut adıdır ve gerisi beklenen bağımsız değişkendir. komut adı ve bir argüman: Burada

, argv iki değeri içermesi beklenen bir listedir. Ayrıca hatalarına yol açan iken (bir ya da üç gibi) bağımsız değişken beklenmedik sayıda varsa Python'un açma notasyonu kullanarak,

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

olarak
script, filename = argv 

yazabilir. Bu, birinin koduna bağlı olarak iyi bir fikir olabilir, çünkü beklenmedik bir argüman bulunmamasını da sağlar.

Ancak, aşağıdaki kod filename aslında dosya adı içeren neden olmaz:

filename = argv 

filename şimdi argüman listesi olmasıdır. Örnek olarak:

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

ilk madde yayınladığınız Python komut adıdır. Herhangi bir ek argüman (dosya adı, bu durumda) bu betiğe aktarılan argümanlardır.

Bu iki argüman

isim script ve filename atanır. script'un bir daha asla kullanılmaması tamamen mümkündür; temelde bir yer tutucu. Ancak, onu kaldırırsanız, bunun yerine filename = argv[1] yaparsınız.

4

Diğerleri script ne olduğunu açıkladık, ama piton deyimi unpacking denir ve genellikle küpe veya dizilerin uygulanır.

= işaretinin sağında bulunan (veya sırayla) her bir değer için bir değişken atamak kısayoludur.

O argv özgü bir şey değildir: akılda tutulması gereken

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

Bir şey sol tarafta değişken sayısı sana başka, sağdaki dizinin öğe sayısını eşleşmesi gerektiğidir get:

2

argv, programınızın argümanlarının bir listesidir. Standart kabuk davranışı, programın adını argv'daki ilk bağımsız değişken olarak içerir.

Python, sol taraftaki değişkenlerin sayısı sağ taraftaki listenin boyutuna eşitse birden fazla değeri bir kerede atayabilir (aynı zamanda daha fazla durumu ele alabilir, ancak bu en temel olanıdır). Örneğin.

script, filename = argv 

tam iki unsurları bulunmayan bir ValueErrorargv eğer bu script yükseltmek olacağını da

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

Not aynıdır.