如何解释功能参数处理的行为?
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。
我有一个功能:
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。