我正在从代码中学习,但我对它的其中一行感到困惑:
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...
这两种给参数的方式有什么区别?
此外,如果我运行代码(按 F5),Python shell 会给我这样的错误:
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 中才能运行它?
最佳答案
区别在于,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()
是在程序运行时给出的。
由于您没有使用参数启动程序,因此会出现错误, 因为没有足够的(恰好 0 个)参数可以解压到变量中。
关于python - 'sys.argv' 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9455148/