15

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

from sys import argv
script, filename = argv

私が理解していることから、2行目は次のように述べていscriptます: 「スクリプト」部分なしでコードを実行してみましたが、問題なく動作しました。その目的が何なのかわかりません。filenameargv

4

4 に答える 4

16

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

ここで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"]
于 2012-12-02T04:21:34.547 に答える
5

とは何かを説明している人がいます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
于 2012-12-02T04:22:20.557 に答える
3

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

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

script, filename = argv

と同じです

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

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

于 2012-12-02T04:26:27.577 に答える
2

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

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

于 2012-12-02T04:18:50.313 に答える