Python sys.argv列表和索引

Fre*_*big 25 python

在下面的代码中我理解sys.argv使用列表,但是我不清楚索引是如何在这里使用的.

def main():

  if len(sys.argv) >= 2:
    name = sys.argv[1]
  else:
    name = 'World'
  print 'Hello', name

if __name__ == '__main__':
  main()
Run Code Online (Sandbox Code Playgroud)

如果我改变

name = sys.argv[1]
Run Code Online (Sandbox Code Playgroud)

name = sys.argv[0] 
Run Code Online (Sandbox Code Playgroud)

并为它返回的参数键入内容:

Hello C:\Documents and Settings\fred\My Documents\Downloads\google-python-exercises
\google-python-exercises\hello.py
Run Code Online (Sandbox Code Playgroud)

哪种有意义.

有人可以解释这里如何使用2:

if len(sys.argv) >= 2:
Run Code Online (Sandbox Code Playgroud)

以及如何在这里使用1:

name = sys.argv[1] 
Run Code Online (Sandbox Code Playgroud)

wes*_*cpy 39

让我们说你在命令行:

C:\> C:\Documents and Settings\fred\My Documents\Downloads\google-python-exercises
\google-python-exercises\hello.py John
Run Code Online (Sandbox Code Playgroud)

为了便于阅读,我们只需将其缩短为:

C:\> hello.py John
Run Code Online (Sandbox Code Playgroud)

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'
Run Code Online (Sandbox Code Playgroud)

那么这是什么意思?这意味着如果你输入:

  • " 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个元素吗?

  • 谢谢你非常明确的解释. (2认同)

Tho*_*ers 11

sys.argv是传递给Python程序的参数列表.第一个参数sys.argv[0]实际上是调用程序的名称.这不是Python的事情,而是大多数操作系统的工作方式.sys.argv[0]存在的原因是,您可以根据调用方式更改程序的行为.sys.argv[1]因此是你实际传递给程序的第一个参数.

因为Python中的列表(如大多数序列)开始索引为0,并且因为索引超出列表末尾是一个错误,所以您需要先检查列表的长度是否为2或更长,然后才能访问sys.argv[1].


Dav*_*d Z 6

简而言之,sys.argv是用于运行程序的命令中出现的单词列表.第一个单词(列表的第一个元素)是程序的名称,列表的其余元素是提供的任何参数.在大多数计算机语言(包括Python)中,列表从零开始索引,这意味着列表中的第一个元素(在本例中是程序名称)是sys.argv[0],第二个元素(第一个参数,如果有的话)是sys.argv[1],等等.

测试len(sys.argv) >= 2只是检查列表的长度是否大于或等于2,如果至少有一个参数提供给程序将是这种情况.


Fre*_*big 5

所以如果我想返回一个名字和姓氏:你好 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()
Run Code Online (Sandbox Code Playgroud)

编辑:发现上面的代码使用 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()
Run Code Online (Sandbox Code Playgroud)