1 各种参数使用之坑
Python强大多变,原因之一在于函数参数类型的多样化。方便的同时,也为使用者带来更多的约束规则。如果不了解这些规则,调用函数时,可能会出现如下一些语法异常:
(1) SyntaxError: positional argument follows keyword argument
(2) TypeError: f() missing 1 required keyword-only argument: 'b'
(3) SyntaxError: keyword argument repeated
(4) TypeError: f() missing 1 required positional argument: 'b'
(5) TypeError: f() got an unexpected keyword argument 'a'
(6) TypeError: f() takes 0 positional arguments but 1 was given
2 总结主要的参数使用规则
位置参数
的定义:时根据函数定义的参数位(形参)置来传递参数,是最常见的参数类型。
位置参数不能缺少:
规则1:位置参数必须一一对应,缺一不可
关键字参数
在函数调用时,通过‘键--值’方式为函数形参传值,不用按照位置为函数形参传值。
这么调用,就是关键字参数:
但是下面调用就不OK:
规则2:关键字参数必须在位置参数右边
下面调用也不OK:
规则3:对同一个形参不能重复传值
默认参数
在定义函数时,可以为形参提供默认值。对于有默认值的形参,调用函数时如果为该参数传值,则使用传入的值,否则使用默认值。如下是默认参数:
规则4:无论是函数的定义还是调用,默认参数的定义应该在位置形参右面
只在定义时赋值一次;默认参数通常应该定义成不可变类型
可变位置参数
如下定义的参数a为可变位置参数:
调用方法:
但是,不能这么调用:
可变关键字参数
如下是可变关键字参数:
调用方法:
但是,不能这么调用:
3 五类参数使用例子
今天举例说明python5类参数:位置参数,关键字参数,默认参数,可变位置或关键字参数的使用。
默认参数不能位于可变关键字参数后.
调用f:
可变位置参数实参后被解析为元组;而c取得默认值10; d被解析为字典.
再次调用f:
a=1传入时a就是关键字参数,b,d都未传值,c被传入12,而非默认值。
注意观察参数, 既可以,也可以 其可读性比第一种更好,建议使用f(a=1)。如果要强制使用,需要在前面添加一个星号:
此时f(1)调用,将会报错:
只能才能OK.
说明前面的发挥作用,它变为只能传入关键字参数,那么如何查看这个参数的类型呢?借助python的模块:
可看到参数的类型为,也就是仅仅为关键字参数。
但是,如果f定义为:
查看参数类型:
可以看到参数既可以是位置参数也可是关键字参数。
领取专属 10元无门槛券
私享最新 技术干货