导语
由于之前遇到过几次有关于参数类型的坑,以及经常容易把一些参数类型搞混淆,现在做一下有关参数类型的总结记录以及对之前踩坑经历的分析。
参数类型
首先我们列举一下有关于Python的参数类型,以及实际上的运用和原理。
- 位置参数(必选参数)
- 默认参数
- 可变参数
- 关键字参数
位置参数(必选参数)
首先是位置参数,同时也被称作必选参数,位置参数很好理解,只要记住这点:
在函数定义时直接给定的此参数名称,调用时按照参数的位置顺序,依次赋予参数值。
示例:
def person_info(name, age): print("My name is %s, I am %s years old" % (name, age)) person_info("zhangsan", "49") # name,age都是位置参数,按照位置顺序,函数中依次接收参数值。
默认参数
默认参数,默认参数存在许多便利的地方,但是同时也存在许多坑,等到后面我们再去仔细分析下为什么存在这些坑,以下几点我们需要注意的:
- 可以为一个或者多个参数指定默认值,当调用函数时可以不用传入该参数值,大大降低函数调用的难度。
- 当需要用传入的参数值代替默认参数的默认值时,可以按照参数位置顺序传入,同时也可以指定参数名传入。
示例:
def person_info(name, age, sex='man'): print("My name is %s, I am %s years old, I am <i style="color:transparent">本文来源gaodai$ma#com搞$代*码*网(</i>%s" % (name, age, sex)) person_info('zhangsan', '15') person_info('lisi', '15', 'women') person_info('lisi', '20', sex='women')
可变参数
可变参数,顾名思义就是传入的参数数量是可变的:
可变参数在实际中,传入的数量可以是任意多个,但也可以没有。
而可变参数会在传入函数内部时,是一个tuple的形式。
示例:
def add(*numbers): sum = 0 for i in numbers: sum+=i return sum print(add(1,3,4,2,1,4,1,3)) numbers=[2,3,4,1,5] add(*numbers) # 当传入的参数为list时,会将list中所有的元素作为可变参数,传进去
关键字参数
当可变参数在传入0个或者任意个参数时,这些可变参数会在函数调用时自动组装成一个tuple。而关键字参数也允许你传入0个或者任意个含参数名的参数,这些关键字参数会函数内部自动组装为一个dict。调用函数时,可以只传入必选参数。
扩展函数的功能,**kwargs
示例:
def person_info(**kw): for key,value in kw.items(): print(key, value) person_info(name='zhangsan', age=15) person = {'name': 'zhangsan', 'age': 13} person_info(**person)
命名关键字参数
对于关键字参数,函数的调用者可以传入任意不受限制的关键字参数。但是针对到底传入了哪些参数,就需要通过函数内部分析检查。所以命名关键字参数就是限制传入的参数的名字,只能传我已命名关键字参数。
- 命名关键字参数需要一个特殊分隔符*,分隔符后面的参数会被视为命名关键字参数。
- 当函数中已经存在一个可变参数,后面跟着的命名关键字参数就不需要一个*特殊分隔符——“”**。
- 命名关键参数可以有默认值,从而简化调用。
- 命名关键参数必须传入一个参数名,这和位置参数不同。如果没有传入参数名,调用将会报错。