失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > python可变参数和关键字参数位置_python 参数笔记 -- 位置参数 关键字参数 命名

python可变参数和关键字参数位置_python 参数笔记 -- 位置参数 关键字参数 命名

时间:2020-09-04 04:39:16

相关推荐

python可变参数和关键字参数位置_python 参数笔记 -- 位置参数 关键字参数 命名

这么多名称,python到底有几种参数:

2种:普通参数(即位置参数,靠位置先后来指定参数),关键字参数(即命名参数,靠名字来指定参数)。

常说的可变参数也就是普参的集合,*args。

常说的关键字参数一般指关键字参数集合,**kwargs。

参数优先级:普通参数(位参)> 普参集 > 关键字参数 > 关参集:

def add(a, *args, b=2, **kwargs):print('a:', a)#普通参数print('args:', args)#普参集print('b:', b)#关键字参数,在定义函数时使用就是默认参数print('kwargs:', kwargs)#关参集

add(1, 2, 3, b=4, c=5, d=6)

输出>>a: 1args: (2, 3)

b:4kwargs: {'c': 5, 'd': 6}

具体如下:

形参:形式参数:parameter;(在定义函数时指定的参数形式,区别于实参,跟位参关参等不在一个维度。如:

defadd(a,b): #这里的a,b为形参(换个维度也可以称为位置参数)return a+b

实参:实际参数(或直接称参数,以下同理):argument(简:arg,复:args);(在调用函数时指定的参数值,如:

c = add(1, 2) #这里的1,2为实参(换个维度也可以称为位置参数)

参考:

默认参数:形参里的关键字参,如

def c(a=1, b): #a为默认参,b为位参pass

可变参数:即可选参数,即参数集,如*args,**kwargs, 即调用函数时可随意填入*args,**kwargs中的0个或多个,具体参考下文。

普通参数:即位置参数,最普通常用的参数形式, 区别于关键字参数,顾名思义,是靠位置来明确参数指定的。即不靠名字标识符,就一个光杆。

位置参数集:把位参打包,放入*args元组;(args只是名称,可换成其他任意合法标识符,如:*my_args)

def c(*my_argsss): #类型被指定为元组

print(type(my_argsss))

c(1,2)

输出>>

c(1)

输出>>

命名实参:关键字参数:keyword_argument(简:kwarg,复:kwargs);(区别于位参,关参靠名字来指定参数,在定义函数和调用函数的时候指定了名字(标识符),如:

def add(a, b=1): #a为位参,b为默认参(注意顺序,不能把位参放到关键参后面)

return a+b

add(2, b=5) #调用的时候,b=5就是关键参,这里b为标识符(identifier)

def c(**k):

print(type(k)) #类型被指定为字典

c(a=1, b=2) #a,b为标识符

输出>>

c(**{'a':1,'b':2})

输出>>

c({'a':1,'b':2})

输出>>TypeError: c() takes 0 positional arguments but 1 was given(类型错误:c()未定义位置参数,但接收到了 1 个位置参数)

#{'a':1,'b':2}被当成一个参数,这个参数是字典,这个字典没有标识符,所以是位参;

#**{'a':1,'b':2}被解析成多个参数,参数是字典里的key=value,标识符为key,实参为value

命名实参集:关键字参数集:**kwargs;(kwargs只是名称,可换成其他任意合法标识符,如:**some_kws。具体如下:

defadd(a, b):return a +b

add(a=1, b=2)

输出>>3add(**{'a':1,'b':2})

输出>>3

def add(**k):

returnk['a']+k['b']

add(a=1,b=2)

输出>>3add(**{'a':1,'b':2})

输出>>3

python可变参数和关键字参数位置_python 参数笔记 -- 位置参数 关键字参数 命名参数 形式参数 默认参数 可变参数 可选参数 位置顺序...

如果觉得《python可变参数和关键字参数位置_python 参数笔记 -- 位置参数 关键字参数 命名》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。