「Learn Python the Hard Way」を読んでいて、2行目の「スクリプト」の部分で混乱していました。
from sys import argv
script, filename = argv
私の理解によると、2行目はscript
とfilename
がargv
を構成していることを示しています。 「スクリプト」の部分なしでコードを実行してみましたが、問題なく動作しました。どういう目的なのかよくわかりません。
一般に、コマンドライン実行可能ファイルの最初の引数はスクリプト名で、残りは予期される引数です。
ここで、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"]
他の人は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
argv
は、プログラムへの引数のリストです。標準シェルの動作には、argv
の最初の引数としてプログラム自体の名前が含まれます。
左側の変数の数が右側のリストのサイズと等しい場合、Pythonは一度に複数の値を割り当てることができます(より多くのケースを処理することもできますが、これが最も基本的です)。例えば。
script, filename = argv
と同じです
script = argv[0]
filename = argv[1]
また、ValueError
に2つの要素がない場合、そのスクリプトはargv
を発生させることに注意してください。
argv
の最初の項目は、実行中のPythonスクリプトの名前です。追加の引数(この場合はファイル名)は、このスクリプトに渡される引数です。
これらの2つの引数には、script
およびfilename
という名前が割り当てられます。 script
が二度と使用されない可能性は十分にあります。基本的にはプレースホルダーです。ただし、削除した場合はfilename = argv[1]
代わりに。