Каждый раз, когда у меня были нечетные проблемы как это, я обычно сажусь с инструментом как WireShark и смотрю на необработанные данные, передаваемые назад и вперед. Вы могли бы быть удивлены, где вещи разъединяются, и Вы только , уведомил , когда Вы пытаетесь читать.
d2, = values [s]
аналогично a, b = f ()
, за исключением распаковки кортежей из 1 элемента.
>>> T=(1,)
>>> a=T
>>> a
(1,)
>>> b,=T
>>> b
1
>>>
a
] - кортеж, b
- целое число.
_
похоже на любое другое имя переменной, но обычно оно означает «Меня не волнует эта переменная»
Второй вопрос: это «распаковка значения». Когда функция возвращает кортеж, вы можете распаковать его элементы.
>>> x=("v1", "v2")
>>> a,b = x
>>> print a,b
v1 v2
Символ _ в оболочке Python также относится к значению последней операции. Следовательно,
>>> 1
1
>>> _
1
Запятые относятся к распаковке кортежа. Что происходит, так это то, что возвращаемое значение является кортежем, и поэтому оно распаковывается по переменным, разделенным запятыми, в порядке элементов кортежа.