python中函数的参数分为普通参数、默认参数、非关键字参数、关键字参数,下面我们就具体讨论下各个参数类型。
比如:
def func(a, b, c = 0, *args, **kw):
print 'a = ' + str(a) #str()函数是将a转换成str类型,因为 + 左右类型都应为str类型
print 'b = ' + str(b)
print 'c = ' + str(c)
print 'args: ' + str(args)
print 'kw: ' + str(kw)
for k in kw:
print k + ':' + str(kw[k])
func(1, 2, 3, 4, 5, name='yjy', age=23)
参数a, b是普通参数;c是默认参数,不过默认参数可以被传入的值覆盖掉;*args是非关键字参数,形式为 *x;**kw是关键字参数,关键字参数形式是 **x。
*args非关键字参数,其结果是一个tuple;**kw 关键字参数,其结果是一个dict。虽然非关键字参数和关键字参数都带有 *,而且关键字参数还带有两个 **,但是只要知道了他们的结果一个是tuple,一个是dict,在函数内部使用到这些参数时就无须有过多负担,按照tuple,dict进行操作处理就可以了。
我是因为原来学习C语言的main函数参数时,心里总是觉得应该和C语言main函数的参数差不多。在了解了python的这两个带 * 的参数后,发现是不一样的,python的这两个 * 参数比C语言的简单很多。
str() 函数是将a转换为str类型,因为 + 左右都应该是 str 类型。在访问关键字参数时,dict在遍历时,是通过key访问的,所以有kw[k].