Списки и индексы 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 Solutions collect form web for “Списки и индексы Python sys.argv”

скажем, в командной строке:

 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, здесь есть два элемента.

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, eg, John otherwise there is only 1 element... the program name, eg, 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 элемента?

sys.argv – это список аргументов, переданных программе Python. Первый аргумент, sys.argv[0] , на самом деле является именем программы при ее вызове. Это не Python, но как работает большинство операционных систем. Причина sys.argv[0] заключается в том, что вы можете изменить поведение своей программы в зависимости от того, как она была вызвана. sys.argv[1] является первым аргументом, который вы фактически передаете программе.

Поскольку списки (как и большинство последовательностей) в Python начинают индексировать в 0, а потому, что индексирование за концом списка является ошибкой, вам нужно проверить, имеет ли список длину 2 или больше, прежде чем вы сможете получить доступ к sys.argv[1] .

В двух словах, sys.argv – это список слов, которые появляются в команде, используемой для запуска программы. Первое слово (первый элемент списка) – это имя программы, а остальные элементы списка – любые аргументы. На большинстве языков программирования (включая Python) списки индексируются с нуля, что означает, что первый элемент в списке (в данном случае – имя программы) – sys.argv[0] , а второй элемент (первый аргумент, если есть является одним) является sys.argv[1] и т. д.

Тест len(sys.argv) >= 2 просто проверяет, что список имеет длину, большую или равную 2, что будет иметь место, если был len(sys.argv) >= 2 хотя бы один аргумент, предоставленный программе.

Поэтому, если бы я хотел вернуть имя и фамилию, такие как: 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() 

Изменить: обнаружено, что приведенный выше код работает с двумя аргументами, но сбой с 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() 

Как объяснено в разных атрибутах уже, sys.argv содержит аргументы командной строки, которые вызвали ваш скрипт Python.

Тем не менее, Python поставляется с библиотеками, которые помогают легко разбирать аргументы командной строки. А именно, новый стандартный argparse . Использование argparse бы вас от необходимости писать много шаблонов.

  • Как подсчитать количество букв в строке без пробелов?
  • Инициализация локальной переменной Python
  • Вложенный цикл while в Python
  • Итерированная функция в Python
  • Как удалить все знаки препинания в строке? (Python)
  • Почему PYTHONPATH игнорируется?
  • Конкатенация кортежа
  • Не удалось запустить сервер devlopment - BindError: невозможно найти согласованный порт localhost
  • Python - лучший язык программирования в мире.