문제

Why should sys.argv with a negative index allow printing same value as sys.argv[0]? That too, it allows this up to number of arguments passed.

So, a call to hello.py at developers.google.com, such as the one below (with 3 arguments including script name) : python hello.py Sumit Test

would allow accessing sys.argv[-1], [-2] and [-3] with all of them printing the same value as argv[0] i.e. hello.py, but argv[-4] will throw the expected error:

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

The code is:

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()
도움이 되었습니까?

해결책

Because you are passing only three arguments, my example below should help you understand:

>>> [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

Negative index prints a value from the right hand side.

Accessing Lists
For instance our array/list is of size n, then for positive indices 0 is the first index, 1 the second and the last index will be n-1. For negative indices, -n is the first index, -(n-1) second, last negative index will be –1.

On the basis of your comment, I am adding an example for clarification:

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]

Please observe the output:

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

The number of arguments passed is three. argv[-1] is the last argument, which is two

다른 팁

Negative indexes count from the end of the list:

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

Asking for [-4] would go off the end of the list, giving an exception.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top