关键字参数是传递给函数的名称-值对,它允许我们传入
0个
或
任意个
包含参数名的参数,它直接将参数中形参的名称和实参的值关联起来了,因此允许函数调用时参数的顺序与定义时不一致,下面的例子将帮助我们理解关键字参数:
def info(name,age):
print("\nMy name is " + name.title())
print("I'm " + age.title() + " years old")
info(name = 'Chenshuo',age = '25')
info(age = '25',name = 'Chenshuo')
结果如图:
当然你可以使用位置参数的方式直接来调用函数,结果也是一样的:
info('chenshuo','25')
以上只是关键字参数的基础用法,前面曾经提到过关键字参数允许我们传入任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个字典,请看下例:
def info(name,age,**kw):
print("\nMy name is " + name.title())
print("I'm " + age.title() + " years old")
print(kw)
info("Chenshuo","25")
info("Chenshuo","25",city="Hefei",sex="male")
定义函数时在参数kw前加上两个**,表示kw为
关键字参数
,这样一来我们不仅可以只传入位置参数,还可以传入任意个数的关键字参数,结果如图:
可以看到传入的关键字参数是以字典的形式作为结果展示的,关键字参数最大的功能就是
扩展了函数的功能
,在上面定义的函数info中,我们不仅可以得到关于名字和年龄的基础信息,还允许函数的调用者传递更多的其他的信息。
我们还可以限制接受哪些特定的关键字参数,这叫做
命名关键字参数
,程序如下:
def info(name,age,*,city,sex):
print(name,age,city,sex)
info("Chenshuo","25",city="Hefei",sex="male")
和关键字参数前加**不同,命名关键字参数使用的是*,*后面的参数被视为命名关键字参数。结果如图:
如果你试图传入非命名关键字参数,调用时则会报错: