from sys import argv — какова функция скрипта

Я читаю «Learn Python the Hard Way» и был сбит с толку «скриптовой» частью второй строки.

from sys import argv
script, filename = argv

Насколько я понимаю, вторая строка говорит: script и filename составляют argv. Я попытался запустить свой код без части «скрипт», и он работал нормально. Я не уверен, какова цель этого.


person user1869775    schedule 02.12.2012    source источник
comment
На самом деле, я не понимаю первую строку from sys. Может ли кто-нибудь объяснить это мне? Я новичок в питоне.   -  person    schedule 10.07.2014
comment
На самом деле запуск кода без script выдает ошибку TypeError: приведение к Unicode: нужна строка или буфер, список найден   -  person Varun Moghe    schedule 10.06.2015


Ответы (4)


Как правило, первым аргументом исполняемого файла командной строки является имя сценария, а остальные — ожидаемые аргументы.

Здесь argv — это список, который должен содержать два значения: имя сценария и аргумент. Используя нотацию распаковки Python, вы можете написать

script = argv[0]
filename = argv[1]

as

script, filename = argv

а также выдает ошибки, если есть неожиданное количество аргументов (например, один или три). Это может быть хорошей идеей, в зависимости от кода, потому что это также гарантирует отсутствие неожиданных аргументов.

Однако следующий код не приведет к тому, что filename действительно будет содержать имя файла:

filename = argv

Это потому, что filename теперь является списком аргументов. Проиллюстрировать:

script, filename = argv
print("Script:", script)  # Prints script name
print("Filename:", filename)  # Prints the first argument

filename = argv
print("Filname:", filename)  # Prints something like ["my-script.py", "my-file.txt"]
person Waleed Khan    schedule 02.12.2012

Другие объяснили, что такое script, но оператор python называется распаковкой и обычно применяется к кортежам или последовательностям.

Это быстрый способ присвоить переменную каждому значению, находящемуся в кортеже (или последовательности) справа от знака =.

Это не что-то конкретное для argv:

>>> a,b = ('Hello','World')
>>> a
'Hello'
>>> b
'World'

Следует иметь в виду, что количество переменных в левой части должно совпадать с количеством элементов в последовательности справа, иначе вы получите:

>>> a,b,c = ('Hello','World')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: need more than 2 values to unpack
>>> a,b = ('Hello','World','!')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: too many values to unpack
person Burhan Khalid    schedule 02.12.2012

argv — это список аргументов вашей программы. Стандартное поведение оболочки включает имя самой программы в качестве первого аргумента в argv.

Python может присваивать сразу несколько значений, если количество переменных в левой части равно размеру списка в правой части (он также может обрабатывать больше случаев, но это самое простое). Например.

script, filename = argv

такой же как

script = argv[0]
filename = argv[1]

Также обратите внимание, что этот скрипт вызовет ValueError, если argv не будет состоять ровно из двух элементов.

person Max    schedule 02.12.2012

Первый элемент в argv — это имя запускаемого вами скрипта Python. Любые дополнительные аргументы (в данном случае имя файла) являются аргументами, передаваемыми этому сценарию.

Этим двум аргументам присваиваются имена script и filename. Вполне возможно, что script больше никогда не будет использоваться; это в основном заполнитель. Однако, если вы удалите его, вместо этого вы сделаете filename = argv[1].

person kindall    schedule 02.12.2012