「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 の文はunpackingと呼ばれ、通常はタプルやシーケンスに適用されます。
これは、タプル (またはシーケンス) の=
符号の右側にある各値に変数を割り当てる簡単な方法です。
に固有のものではありません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]
また、そのスクリプトは、ちょうど 2 つの要素を持たないValueError
場合に発生することにも注意してください。argv
の最初の項目argv
は、実行している Python スクリプトの名前です。追加の引数 (この場合はファイル名) は、このスクリプトに渡される引数です。
これら 2 つの引数には、script
およびという名前が割り当てられますfilename
。script
二度と使用されない可能性は十分にあります。基本的にはプレースホルダーです。ただし、それを削除する場合は、filename = argv[1]
代わりに削除します。