【问题标题】:Python sys.argv negative argument indexPython sys.argv 负参数索引
【发布时间】:2013-06-11 21:01:13
【问题描述】:

为什么带有负索引的 sys.argv 应该允许打印与 sys.argv[0] 相同的值?同样,它也允许传递最多数量的参数。

因此,在developers.google.com 上调用hello.py,如下所示(带有3 个参数,包括脚本名称):python hello.py Sumit Test

将允许访问 sys.argv[-1]、[-2] 和 [-3],它们都打印与 argv[0] 相同的值,即 hello.py,但 argv[-4] 会抛出预期错误:

Traceback (most recent call last):
  File "hello.py", line 35, in <module>
    main()
  File "hello.py", line 31, in main
    print (sys.argv[-4])
IndexError: list index out of range

代码是:

import sys

# Define a main() function that prints a little greeting.
def main():

  # Get the name from the command line, using 'World' as a fallback.
  if len(sys.argv) >= 2:
    name = sys.argv[1]
  else:
    name = 'World'
  print ('Hello', name)
  print (sys.argv[-3])

# This is the standard boilerplate that calls the main() function.
if __name__ == '__main__':
  main()

【问题讨论】:

  • 我无法理解这部分“sys.argv[-1]、[-2] 和 [-3],它们都打印与 argv[0] 相同的值”。他怎么不能是“python hello.py Sumit Test”,它们应该是'Test''Sumit''hello.py'。
  • @olrg - 我编辑了问题以在其中插入代码。我指的是行 print (sys.argv[-3])。

标签: python argv sys


【解决方案1】:

因为您只传递了 三个 参数,所以我下面的示例应该可以帮助您理解:

>>> [1,2,3][-1]   # working 
3
>>> [1,2,3][-2]   # working 
2
>>> [1,2,3][-3]   # working 
1
>>> [1,2,3][-4]   # exception as in your code 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

负索引从右侧打印一个值。

Accessing Lists
例如,我们的数组/列表的大小为 n,那么对于正索引,0 是第一个索引,1 第二个索引和最后一个索引将是 n-1。对于负索引,-n 是第一个索引,-(n-1) 第二个,最后一个负索引将是 –1

根据您的评论,我添加一个示例以进行澄清:

import sys
# main()    
if __name__ == "__main__":
    print len(sys.argv)
    print sys.argv[-1], sys.argv[-2], sys.argv[-3]
    print sys.argv[0],  sys.argv[1], sys.argv[2]

请观察输出:

$ python main.py one two 
3
two one main.py
main.py one two

传递的参数数量是三个。 argv[-1] 是最后一个参数,即two

【讨论】:

  • @RichieHindle 和 Grijesh - 感谢您的回答。但在这种情况下,-1 应该返回最后一个传递的参数,而不是 argv[0]。 -2 和 -3 也一样吗?因此,当我将程序运行为:python hello.py Sumit test 时,argv[0] 是 hello.py,根据答案 argv[-1] 应该是“Test”,但它会打印“hello.py”。 argv[-2] 和 [-3] 也是如此
  • @sumit ye​​s argv[-1] = 最后一个参数,用例子检查更新的答案
【解决方案2】:

负索引从列表末尾开始计数:

>>> ['a', 'b', 'c'][-1]
'c'
>>> ['a', 'b', 'c'][-2]
'b'
>>> ['a', 'b', 'c'][-3]
'a'

要求 [-4] 将超出列表的末尾,给出一个例外。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-02
    • 1970-01-01
    • 2017-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-02
    相关资源
    最近更新 更多