如何解释功能参数处理的行为?

How to explain behaviour of function agrument handling?

我有一个功能:

def test_func(a, b):
    print a
    print b

我知道当函数调用看起来像这样时使用字典是不对的:

a = {1:2, 3:4}
test_func(*a) # function expects a sequence as an argument

它应该是一个元组或一个列表。但是控制台没有显示任何错误并打印出这本字典的键:1 和 3。

看起来像这样:当函数调用需要一个序列,但需要一个字典时,它会提取字典的键作为参数序列。可以吗?

a 一个序列。更具体地说,当迭代 dict 时,迭代会产生字典的键(以不可预测的顺序)。

考虑

for i in {1:2, 3:4}:
    print i

结果将打印 1 和 3,因为 dict 的迭代会产生键。

顺便说一句,还有一个有趣的方法是使用字典来传递参数:

a = {'a':2, 'b':4}
test_func(**a)

双星号将 dict 的值传递给函数的同名参数。在这种情况下,该函数按顺序打印 2 和 4。