2012-05-27 54 views
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超出范围的错误。根据我的理解,我认为* nkw和** kwa是在函数声明中创建的。

任何人都可以帮助我理解这个概念吗?

+2

请注意'* nkw'和'** kwa'通常被称为'* args'和** ** kwargs' – second

回答

1

元组和字典是总是创建,即使它们是空的(即没有任何通过它们)。

+0

感谢您的回复。 – user907629

1

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

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

def someFunc(x=[]): 
    pass 

这里作为默认x名单上实例函数的声明,一个therfore是对函数的所有调用相同。

+0

感谢您的回答。我的问题不是关于传递一个空的列表或字典,或者我的问题不是关于与他们做什么或访问他们。为了澄清,函数声明中使用的参数是否被创建。请参阅@Ignacio Vazquez-Abrams的答案。你会明白的。 – user907629

相关问题