在下面的代码中我理解sys.argv使用列表,但是我不清楚这里是如何使用索引的。
def main():
if len(sys.argv) >= 2:
name = sys.argv[1]
else:
name = 'World'
print 'Hello', name
if __name__ == '__main__':
main()
如果我改变
name = sys.argv[1]
到
name = sys.argv[0]
并为它返回的参数输入内容:
Hello C:\Documents and Settings\fred\My Documents\Downloads\google-python-exercises
\google-python-exercises\hello.py
哪种有意义。
有人可以解释这里使用2的方式:
if len(sys.argv) >= 2:
这里使用的是1:
name = sys.argv[1]
答案 0 :(得分:37)
让我们在命令行上说:
C:\> C:\Documents and Settings\fred\My Documents\Downloads\google-python-exercises
\google-python-exercises\hello.py John
为了便于阅读,我们只需将其缩短为:
C:\> hello.py John
argv
表示通过命令行输入出现的所有项目,但计数从零(0)开始而不是一(1):在这种情况下,“hello.py
”是元素0 ,“John
”是元素1
换句话说,sys.argv[0] == 'hello.py'
和sys.argv[1] == 'John'
...但是,看看这有多少元素? 2,对!所以即使数字是0和1,这里有2个元素。
len(sys.argv) >= 2
只检查您是否输入至少两个元素。在这种情况下,我们输入了2。
现在让我们将你的代码翻译成英文:
define main() function:
if there are at least 2 elements on the cmd-line:
set 'name' to the second element located at index 1, e.g., John
otherwise there is only 1 element... the program name, e.g., hello.py:
set 'name' to "World" (since we did not get any useful user input)
display 'Hello' followed by whatever i assigned to 'name'
这是什么意思?这意味着如果你输入:
hello.py
”,代码输出“Hello World
”,因为您没有给出姓名hello.py John
”,代码输出“Hello John
”因为你做了hello.py John Paul
”,代码仍会输出“Hello John
”因为它不保存也不使用sys.argv[2]
,这是“Paul
” - 你能看到吗?这种情况len(sys.argv) == 3
,因为sys.argv
列表中有3个元素?答案 1 :(得分:10)
sys.argv
是传递给Python程序的参数列表。第一个参数sys.argv[0]
实际上是调用程序的名称。这不是Python的事情,而是大多数操作系统的工作方式。 sys.argv[0]
存在的原因是,您可以根据调用方式更改程序的行为。因此,sys.argv[1]
是您实际传递给该计划的第一个参数。
因为Python中的列表(如大多数序列)开始索引为0,并且因为索引超出列表末尾是一个错误,所以您需要检查列表的长度是否为2或更长,然后才能访问{{1} }。
答案 2 :(得分:6)
简而言之,sys.argv
是用于运行程序的命令中出现的单词列表。第一个单词(列表的第一个元素)是程序的名称,列表的其余元素是提供的任何参数。在大多数计算机语言(包括Python)中,列表从零开始索引,这意味着列表中的第一个元素(在本例中为程序名称)为sys.argv[0]
,第二个元素(第一个参数,如果有)一)是sys.argv[1]
等等。
测试len(sys.argv) >= 2
只是检查列表的长度是否大于或等于2,如果程序中至少提供了一个参数,则会出现这种情况。
答案 3 :(得分:4)
所以,如果我想要返回一个名字和姓氏:Hello Fred Gerbig我会使用下面的代码,这段代码有效,但它实际上是最正确的方法吗?
import sys
def main():
if len(sys.argv) >= 2:
fname = sys.argv[1]
lname = sys.argv[2]
else:
name = 'World'
print 'Hello', fname, lname
if __name__ == '__main__':
main()
编辑:发现上面的代码使用2个参数但是崩溃了1.试图将len设置为3但是什么也没做,仍然崩溃(重新阅读其他答案,现在理解为什么3什么也没做)。如果只输入一个参数,我该如何绕过参数?或者错误检查看起来如何返回“你必须输入2个参数”?
编辑2:弄清楚了:
import sys
def main():
if len(sys.argv) >= 2:
name = sys.argv[1] + " " + sys.argv[2]
else:
name = 'World'
print 'Hello', name
if __name__ == '__main__':
main()
答案 4 :(得分:2)
正如已经在不同的asnwers中所解释的那样,sys.argv
包含调用Python脚本的命令行参数。
但是,Python附带的库可以帮助您轻松地解析命令行参数。即,新标准argparse。使用argparse
可以省去编写大量样板代码的需要。