Что означает var, = что-то в Python? Конкатенация строк?
Я изучаю Python и читаю пример сценария, который включает в себя некоторые определения переменных, которые выглядят так:
output,_ = call_command('git status')
output,_ = call_command('pwd')
def call_command(command):
process = subprocess.Popen(command.split(' '),
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
return process.communicate()
Если я печатаю вывод, я получаю результирующий вывод оболочки, связанный вместе, поэтому я знаю, что он объединяет переменные. Но я не могу найти никакой ссылки на Конвенцию в любом из документов. Может ли кто-нибудь объяснить мне это, чтобы я точно знал, что использую его правильно?
5 ответов
общий вид
a, b = x, y
is кортеж задание. Соответствующие части назначаются, поэтому вышеизложенное эквивалентно:
a = x
b = y
в вашем случае, call_command()
возвращает кортеж из двух элементов (что и есть process.communicate()
returns). Вы назначаете первый output
и _
(что на самом деле является именем переменной, обычно используемым для имени чего-то, когда вам все равно значение).
здесь есть два соглашения:
- распаковать результаты в кортеж из двух элементов (
,
) - меня не волнует второй элемент кортежа, поэтому используйте
_
в имя переменной.
в данном случае process.communicate
возвращает (stdout, stderr)
, но код, который вызывает call_command
не интересуется stderr
поэтому он использует эту запись, чтобы получить stdout
напрямую. Это было бы более или менее эквивалентно:
result = call_command(<command>)
stdout = result[0]
_
- допустимое имя переменной в Python, которое обычно используется, когда вы не собираетесь использовать результат для чего-либо. Итак, вы распаковываете результаты git
команды в две переменные с именем output
и _
, но не будет использовать второй (я предполагаю, что это статус выхода или, возможно, стандартный вывод ошибок).
вы видите это в Perl тоже, с undef
вместо _
.
($dev, $ino, undef, undef, $uid, $gid) = stat($file);
см.http://perldoc.perl.org/perldata.html#List-value-constructors
нет, это не конкатенация строк. The _
само по себе ничего не значит в Python.
в Python, функция может возвращать более одного значения, и вы можете назначить несколько переменных в одном операторе. Сочетание этих двух функций позволяет писать код, например:
def foo():
return 1, 2, 3
a, b, c = foo()
print(a) # prints 1
print(b) # prints 2
print(c) # prints 3
существует общее соглашение в языках, которые поддерживают работу с несколькими значениями, такими как это, называя один _
означает "мне действительно все равно, что в итоге в этом переменная."В вашем примере функция call_command
возвращает то, что команда записывает в стандартный вывод в своем первом возвращаемом значении, и то, что записывается в стандартную ошибку во втором. Тот, кто закодировал это, очевидно, не заботился об ошибках, сообщаемых командами.
выходная конкатенация, которую вы упомянули, должна произойти в другом месте.