web-dev-qa-db-ja.com

from sys import argv-「スクリプト」の機能は何ですか

「Learn Python the Hard Way」を読んでいて、2行目の「スクリプト」の部分で混乱していました。

from sys import argv
script, filename = argv

私の理解によると、2行目はscriptfilenameargvを構成していることを示しています。 「スクリプト」の部分なしでコードを実行してみましたが、問題なく動作しました。どういう目的なのかよくわかりません。

15
user1869775

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

ここで、argvは、スクリプト名と引数の2つの値を含むことが予期されるリストです。 Pythonの解凍表記を使用すると、次のように記述できます。

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

なので

script, filename = argv

一方、引数が予期しない数(1つまたは3つなど)の場合にもエラーをスローします。予期しない引数がないことも保証されるため、コードによっては、これは良い考えです。

ただし、次のコードでは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"]
15
Waleed Khan

他の人はscriptについて説明していますが、pythonステートメントは npacking と呼ばれ、通常タプルまたはシーケンスに適用されます。

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

argvに固有のものではありません。

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

覚えておくべきことの1つは、左側の変数の数が右側のシーケンスの項目の数と一致する必要があることです。それ以外の場合は次のようになります。

>>> 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
5
Burhan Khalid

argvは、プログラムへの引数のリストです。標準シェルの動作には、argvの最初の引数としてプログラム自体の名前が含まれます。

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

script, filename = argv

と同じです

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

また、ValueErrorに2つの要素がない場合、そのスクリプトはargvを発生させることに注意してください。

3
Max

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

これらの2つの引数には、scriptおよびfilenameという名前が割り当てられます。 scriptが二度と使用されない可能性は十分にあります。基本的にはプレースホルダーです。ただし、削除した場合はfilename = argv[1]代わりに。

2
kindall