如果我声明一个非关键字参数的函数,例如元组和关键字参数(如字典),它们是否被声明?
例如:
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超出范围的错误。根据我的理解,我认为* nkw和** kwa是在函数声明中创建的。
任何人都可以帮我理解这个概念吗?
答案 0 :(得分:1)
元组和字典始终创建,即使它们是空的(即没有传递任何内容)。
答案 1 :(得分:1)
nkw
和kwa
当然是作为emty list / dict传递的。做其他事情会完全违背他们的目的,因为你永远无法安全地访问它们,你不必总是检查它们是否存在。
你可能会因为默认参数而混淆。例如:
def someFunc(x=[]):
pass
这里用作x
默认值的列表是在函数声明时实例化的,因此在函数的所有调用中都是相同的。