私は「Pythonを難しい方法で学ぶ」を読んでいて、2行目の「スクリプト」部分で混乱していました。私が理解からfrom sys import argv - "スクリプト"の機能
from sys import argv
script, filename = argv
、2行目は言う:script
とfilename
はargv
を備えます。 "スクリプト"の部分を使わずにコードを実行しようとしましたが、うまくいきました。私はそれの目的が何であるか分かりません。
私は「Pythonを難しい方法で学ぶ」を読んでいて、2行目の「スクリプト」部分で混乱していました。私が理解からfrom sys import argv - "スクリプト"の機能
from sys import argv
script, filename = argv
、2行目は言う:script
とfilename
はargv
を備えます。 "スクリプト"の部分を使わずにコードを実行しようとしましたが、うまくいきました。私はそれの目的が何であるか分かりません。
一般に、コマンドライン実行可能ファイルの最初の引数はスクリプト名で、残りは予想される引数です。
ここで、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"]
argv
の最初の項目は、実行しているPythonスクリプトの名前です。追加の引数(この場合はファイル名)は、このスクリプトに渡される引数です。
これらの2つの引数には、script
とfilename
という名前が割り当てられます。 script
が決して再び使用されることは全くありません。基本的にプレースホルダです。ただし、それを削除すると、代わりにfilename = argv[1]
を実行します。
その他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
argv
は、プログラムの引数のリストです。標準のシェル動作には、最初の引数としてのプログラム自体の名前がargv
に含まれています。
左側の変数の数が右側のリストのサイズと等しい場合、Pythonは一度に複数の値を割り当てることができます(さらに多くのケースを処理できますが、これが最も基本的です)。例えば。
script, filename = argv
argv
が正確に2つの要素を持っていない場合、そのスクリプトがValueError
を引き上げることも
script = argv[0]
filename = argv[1]
ノートと同じです。
実際、私は最初の行 'from sys'を理解していません。誰かが私にそれを説明できますか?私はPythonの初心者です。 –
実際に 'script'を使わないでコードを実行するとエラーが出る** TypeError:Unicodeに強制する:必要な文字列またはバッファ、リストが見つかりました** –