From sys import argv - какова функция "script"
Я читаю "Learn Python the Hard Way" и был смущен частью "script" второй строки.
from sys import argv
script, filename = argv
Из того, что я понимаю, вторая строка говорит: script
и filename
содержат argv
.
Я попытался запустить свой код без части "script", и он работал нормально. Я не уверен, в чем его цель.
Ответы
Ответ 1
В общем случае первым аргументом для исполняемого файла в командной строке является имя script, а остальные - ожидаемые аргументы.
Здесь argv
- это список, который должен содержать два значения: имя script и аргумент. Используя нотацию Python для распаковки, вы можете написать
script = argv[0]
filename = argv[1]
а
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"]
Ответ 2
Другие объяснили, что такое 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
Ответ 3
Первый элемент в argv
- это имя используемого Python script. Любые дополнительные аргументы (имя файла в этом случае) являются аргументами, переданными этому script.
Этим двум аргументам присваиваются имена script
и filename
. Вполне возможно, что script
никогда не будет использоваться снова; это в основном местозаполнитель. Однако, если вы удалите его, вы бы сделали filename = argv[1]
.
Ответ 4
argv
- список аргументов вашей программы. Стандартное поведение оболочки включает имя самой программы в качестве первого аргумента в argv
.
Python может сразу назначить несколько значений, если количество переменных в левой части равно размеру списка с правой стороны (он также может обрабатывать больше случаев, но это самый простой). Например.
script, filename = argv
совпадает с
script = argv[0]
filename = argv[1]
Обратите внимание также, что script поднимет значение ValueError
, если argv
не имеет ровно два элемента.