From sys import argv - какова функция "script" - программирование
Подтвердить что ты не робот

From sys import argv - какова функция "script"

Я читаю "Learn Python the Hard Way" и был смущен частью "script" второй строки.

from sys import argv
script, filename = argv

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

4b9b3361

Ответ 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 не имеет ровно два элемента.