我正在学习代码,我被其中一行代码搞糊涂了,那就是:
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中运行它?
所有其他的答案都解释得很好,但我认为缺少一个基本术语。我只是想补充一下。。。
input()
告诉程序从stdin读取。就像从文件中读取一样,它是一个流。
input()
调用读取,直到到达换行符。您还可以读取stdin
,直到到达EOF(end of file)。另一方面,
sys.argv
只是一个列表,您可以从系统中获得该列表,其中包含用于从shell调用命令的所有参数。从技术上讲,对maximum number of arguments that can be passed on the command line有某种类型的限制(在逐个系统的基础上),这就是xargs
命令存在的原因(使用成批参数调用命令,拆分)。标准物质
echo "I am stdin" | myCommand.py
。。。这与在程序运行后执行此操作的概念相同:
read_from_stdin = input()
参数
myCommand.py "I am an arg"
最后,从
stdin
/input()
中读取不会自动将单词分成一个列表。你可以使用一些额外的逐行阅读方法。但也可以按字符、一次读取特定数量的字符或一次读取全部数据。sys.argv
称为“命令行参数”。如果要传递它们,应该从命令行运行脚本。在Windows系统上,该命令如下所示:其中“cmd>;”是使用“开始”->;“运行”后得到的提示。
区别在于,
sys.argv
(命令行)参数是在程序运行之前(启动时)给定的:这将导致您的变量为:
而
input()
是在程序运行时给出的。由于你没有用参数启动程序,它会给你错误, 因为没有足够(确切地说是0)的参数被解压到变量中。
相关问题 更多 >
编程相关推荐