0

如果我声明一个带有非关键字参数(如元组)和关键字参数(如字典)的函数,它们是否已声明?

例如:

def someFunc(a, *nkw, **kwa):
    nkwList = []
    kwList  = []
    for i in nkw:
        nkwList.append(i)
    for j in kwa:
        kwList.append(j)
    print a, nkwList, kwList

输入:

someFunc(1)

输出:

1 [] []

如您所见,即使我没有传递元组和字典,当我循环遍历 nkw 和 kwa 时,我也没有得到 Index out of range 错误。据我了解,我认为 *nkw 和 **kwa 是在函数声明本身中创建的。

谁能帮我理解这个概念?

4

2 回答 2

1

元组和字典总是被创建,即使它们是空的(即它们没有传递任何东西)。

于 2012-05-27T10:26:08.000 回答
1

nkwkwa当然作为空列表/字典传递。做其他事情会完全违背他们的目的,因为您永远无法安全地访问它们,您不必总是检查它们是否存在。

您可能会将其与默认参数混淆。例如:

def someFunc(x=[]):
    pass

这里作为默认值的列表x在函数声明时被实例化,因此在函数的所有调用中都是相同的。

于 2012-05-27T10:30:18.267 回答