Mengapa argumen Tuple yang diteruskan dari kamus memiliki tanda koma?

Baru-baru ini saya memperhatikan bahwa ketika saya meneruskan argumen fungsi yang merupakan nilai tupel dari kamus, ia memiliki tanda koma di bagian akhir. Di bawah ini adalah contoh kode sederhana dari masalah saya.

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.

Inilah hasilnya:

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)

Saya bertanya-tanya mengapa juru bahasa python memutuskan untuk mengemas Tuple dari kamus seperti ini? Saya menggunakan python3.6.


person zviad    schedule 10.05.2018    source sumber


Jawaban (1)


Anda meneruskan Tuple sebagai argumen pertama. Anda perlu membongkar nilai:

myfun(*arg_dict[0])
person Konstantin    schedule 10.05.2018