2012-12-02 33 views
14

私は「Pythonを難しい方法で学ぶ」を読んでいて、2行目の「スクリプト」部分で混乱していました。私が理解からfrom sys import argv - "スクリプト"の機能

from sys import argv 
script, filename = argv 

、2行目は言う:scriptfilenameargvを備えます。 "スクリプト"の部分を使わずにコードを実行しようとしましたが、うまくいきました。私はそれの目的が何であるか分かりません。

+0

実際、私は最初の行 'from sys'を理解していません。誰かが私にそれを説明できますか?私はPythonの初心者です。 –

+0

実際に 'script'を使わないでコードを実行するとエラーが出る** TypeError:Unicodeに強制する:必要な文字列またはバッファ、リストが見つかりました** –

答えて

13

一般に、コマンドライン実行可能ファイルの最初の引数はスクリプト名で、残りは予想される引数です。

ここで、argvは、スクリプト名と引数の2つの値を含むと予想されるリストです。 (1または3のような)引数の予想外の数が存在する場合にも、エラーを投げながら、Pythonの開梱表記を使用して、

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

script, filename = argv 

などを書くことができます。予期しない引数がないことを保証するため、これはコードに応じて良い考えです。

ただし、次のコードは、実際のファイル名を含むfilenameにはなりません。

filename = argv 

filenameは現在の引数リストであるためです。説明するために:

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

argvの最初の項目は、実行しているPythonスクリプトの名前です。追加の引数(この場合はファイル名)は、このスクリプトに渡される引数です。

これらの2つの引数には、scriptfilenameという名前が割り当てられます。 scriptが決して再び使用されることは全くありません。基本的にプレースホルダです。ただし、それを削除すると、代わりにfilename = argv[1]を実行します。

4

その他scriptが何であるかを説明しているが、Pythonの文はunpackingと呼ばれ、通常のタプルや配列に適用されます。

これは、=符号の右側のタプル(またはシーケンス)内にある各値に変数を割り当てるための簡単な方法です。

それはargvに特有のものではありません。心に留めておくべき一つのことは、左側の変数の数は、あなたが他に、右側のシーケンス内の項目数と一致しなければならないということである

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

得意先:

>>> 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は、プログラムの引数のリストです。標準のシェル動作には、最初の引数としてのプログラム自体の名前がargvに含まれています。

左側の変数の数が右側のリストのサイズと等しい場合、Pythonは一度に複数の値を割り当てることができます(さらに多くのケースを処理できますが、これが最も基本的です)。例えば。

script, filename = argv 

argvが正確に2つの要素を持っていない場合、そのスクリプトがValueErrorを引き上げることも

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

ノートと同じです。

関連する問題