5

私はコードから学んでいますが、その行の1つである次の行に混乱しています。

things = [float(arg) for arg in sys.argv[1:]]
Omega_a, Omega_b, Delta_a, Delta_b, \
init_pop_a, init_pop_b, tstep, tfinal = things

私はオンラインで検索し、その意味を理解しようとしsys.argました。これが私の理解です。

ファイルsys.argv[0]sys.argv[1:]も同様であり、ユーザーが指定する必要のある残りのパラメーターです。私はそれが正しく理解されているかどうかわかりません、そしてもしそうなら、なぜそれが次のようにできないのか理解できません:

Omega_a = input() 
Omega_b = input()
etc...

パラメータを与えるこれらの2つの方法の違いは何ですか?

また、コードを実行すると(を押すF5)、Pythonシェルは次のようなエラーを表示します。

Traceback (most recent call last):

File "C:\Users\testcode.py", line 55, in <module>
init_pop_a, init_pop_b, tstep, tfinal = things
ValueError: need more than 0 values to unpack

sys.argv[1:]エラーが発生する前に、パラメーター()を指定する機会すら与えられませんでした。だから私はオンラインで検索しました。このコードをcmdで実行する必要があるようですが、それは私をさらに混乱させました。なぜそれを実行する必要があり、実行するためにcmdにどのように入れる必要がありますか?

4

4 に答える 4

5

違いは、sys.argv(コマンド ライン) パラメータがプログラムの実行前 (起動中) に指定されることです。

python testcode.py arg1 arg2 arg3 arg4 and so on ...

これにより、変数は次のようになります。

Omega_a = 'arg1'
Omega_b = 'arg2'
Delta_a = 'arg3'
Delta_b = 'arg4'
init_pop_a = 'and'
init_pop_b = 'so'
tstep = 'on'
tfinal = '...'

プログラムの実行中にinput()s が与えられます。

パラメーターを指定してプログラムを開始しないと、変数にアンパックするのに十分な (正確に 0) パラメーターがないため、エラーが発生します。

于 2012-02-26T17:11:03.267 に答える
2

sys.argv「コマンド ライン パラメータ」と呼ばれます。それらを渡したい場合は、コマンドラインからスクリプトを実行する必要があります。Windows システムでは、コマンドは次のようになります。

cmd> python C:\Users\testcode.py arg1 args2

ここで、「cmd>」は、「Start」->「Run」を使用した後に表示されるプロンプトです。

于 2012-02-26T17:12:04.370 に答える
2

他のすべての回答は問題なく説明さsys.argvれていましたが、基本的な用語が欠落していたと思います。私はそれを追加したかっただけです...

input()stdinから読み取るようにプログラムに指示します。

ファイルから読み取るようなもので、ストリームです。呼び出しはinput()、改行に到達するまで読み取ります。stdinまた、EOF に達するまで読み取ることもできます ( end of file )。

sys.argv一方、シェルからコマンドを呼び出すために使用されたすべての引数を含む、システムから利用できる単なるリストです。技術的には、コマンドラインで渡すことができる引数の最大数には、(システムごとに) 何らかの制限があります。これが、コマンドが存在する理由ですxargs(引数のバッチでコマンドを呼び出すには、分割します)。上)。

標準入力

echo "I am stdin" | myCommand.py

...これは、プログラムの実行後にこれを行うのと同じ概念です。

read_from_stdin = input()

引数

myCommand.py "I am an arg"

stdin最後に、 /からの読み取りはinput()、単語を自動的にリストに分割しません。行単位で読み取るための追加のメソッドが使用できます。ただし、文字単位、一度に特定の文字数、またはデータ全体を一度に読み取ることもできます。

于 2012-02-26T17:29:08.167 に答える
1

パラメータはプログラム入力と同じではありません。たとえば、ここwgetではパラメータとともに使用されます。

$ wget "I am a parameter!"

入力で使用されますcat

$ cat
Now you type. This is the input.

これがエラーの理由でもあります。プログラムの実行後にパラメータをそのように指定することはできません。

于 2012-02-26T17:10:21.360 に答える