Python 3.X | 一文看懂不懵圈:位置参数(必选参数)、默认参数、可变参数、关键字参数、形参、实参...

Win 10+Python 3.6.3

不管是什么参数,它们身处环境是:函数(function)参数让函数如虎添翼,灵活、强大。
1、概念释义:

def func(x, y=2, *arg, *, z, **kwargs):
	#print(x, y)
	#print(len(arg), arg[0])
	print(kwargs)

#func(1)
#func(y=3, x=4)
#func(1, 3, 4, 5)
d = {'a':1, 'b':2}
func(1, **d)

上述代码中:

  • 函数定义过程中的如 xy,称之为:形参(parameter)
  • 调用函数时(如 func(1))分别传递给xy的值 12,称之为:实参(argument)。是具体、实际的值;
  • 在函数调用(如 func(1))时,根据函数定义的参数位置来传递的参数 x,称之为:位置参数(也称 必选参数);它是缺一不可的,如果有多个位置参数,顺序得一一对应。
  • 在函数定义时,为形参 y赋 初始值,称之为:默认参数。即 定义了默认的值的参数。在调用函数时,可传也可不传该已赋初值的参数。不管在函数定义、还是调用,所有位置参数必须出现在默认参数之前。默认参数一定要用不可变对象,否则运行时报错。使用默认参数能降低调用函数的难度。
  • 在函数定义时,带一个*号的参数(如 args),称之为:可变参数(传入的参数个数的可变的,0~n个)。它用于收集参数,接收的是一个元组 tuple(或列表 list)。如果可变参数后面还要加上其他定制的参数,那么在定义函数时,必须使用关键字参数(如 kwargs,前面带了两个 **号,接收的是一个字典 dict。在调用时,对其赋值,采用“键-值”形式,如d)来定制,否则Python会认为这些是可变参数。In other words,关键字参数参数允许传入0~n个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict
  • 关键字参数的命名是不受限制的,但若要限制调用者传入的参数名,同时也可以提供默认值(可选的),这就是命名关键字参数(如 z)。在没有可变参数的情况下(有,则不用加*),必须加一个*号作为特殊分隔符,否则Python解释器无法识别位置参数和命名关键字参数。

2、参数组合:
在Python定义函数时,可使用位置参数、默认参数、可变参数、关键字参数、命名关键字参数,这5种都可以组合使用。但是,参数定义的顺序必须如下:调用时也得遵循
在这里插入图片描述
尽管可以组合多达5种参数,但是,不要同时使用太多组合,否则函数接口的可理解性将很差。

小结:
Python的函数具有非常灵活的参数形态,既可以实现简单的调用,又可以传入非常复杂的参数。定义函数时,将参数的名字、位置确定后,函数的接口定义就完成了。对于函数调用者而言,只需知道如何传递正确的参数、返回什么样的值就足够了,至于函数内部封装的复杂逻辑,调用者无需了解。

猜你喜欢

转载自blog.csdn.net/weixin_38256474/article/details/83479262