Почему переданный аргумент кортежа из словаря имеет запятую? - PullRequest
0 голосов
/ 10 мая 2018

Недавно я заметил, что когда я передаю аргумент функции, который является значением кортежа из словаря, он имеет запятую в конце. Ниже приведен простой пример кода моей проблемы.

def myfun(*args):
   print(f'args={args}')
   x, y = args
   print(f'x={x}, y={y}')


myfun(1, 2) # passing arguments this way works fine
arg_dict = {0: (1, 2), 1: (2, 3)}
print(f'arg_dict[0]={arg_dict[0]}') # when I print dictionary value it seems quite OK.
myfun(arg_dict[0]) # passed dictionary value has trailing comma.

Вот вывод:

args=(1, 2)
x=1, y=2
arg_dict[0]=(1, 2)
args=((1, 2),)
Traceback (most recent call last):
  File "c:\Users\name\Documents\pname\test.py", line 28, in <module>
    myfun(arg_dict[0])
  File "c:\Users\name\Documents\pname\test.py", line 21, in myfun
    x, y = args
ValueError: not enough values to unpack (expected 2, got 1)

Мне интересно, почему интерпретатор Python решает упаковать кортеж из словаря, как это? Я использую python3.6.

1 Ответ

0 голосов
/ 10 мая 2018

Вы передаете кортеж в качестве первого аргумента.Вам необходимо распаковать значения:

myfun(*arg_dict[0])
...