Python sys.argv 列表和索引
在下面的代码中,我知道 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]
5 个回答
简单来说,sys.argv
是一个包含运行程序时输入的命令中所有单词的列表。列表中的第一个单词(也就是第一个元素)是程序的名字,后面的元素就是你提供的任何参数。在大多数编程语言中(包括Python),列表的索引是从零开始的,这意味着列表中的第一个元素(在这里就是程序名)是 sys.argv[0]
,第二个元素(如果有的话,就是第一个参数)是 sys.argv[1]
,依此类推。
测试 len(sys.argv) >= 2
只是用来检查这个列表的长度是否大于或等于2,如果是的话,说明至少给程序提供了一个参数。
sys.argv
是传递给 Python 程序的一系列参数。第一个参数 sys.argv[0]
实际上是程序的名字,就是你运行它时用的名字。这不是 Python 特有的,而是大多数操作系统的工作方式。存在 sys.argv[0]
的原因是,你可以根据程序是如何被调用的来改变它的行为。而 sys.argv[1]
则是你实际传递给程序的第一个参数。
在 Python 中,列表(就像大多数序列一样)是从 0 开始编号的,而且如果你试图访问超出列表末尾的索引会出错,所以在访问 sys.argv[1]
之前,你需要检查一下这个列表的长度是否至少为 2。
假设你在命令行上输入了:
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个元素。