关于不定长参数*args的思考

不定长参数*args在函数传参时十分有用,他能接收任意个参数,当把星号去掉时,相当于把它接收参数’打包‘,当加上星号时,相当于解包:

     def func(*args):
  			print(*args)
  			print(args)
  	func(1,2,3,4,5)	

分别会打印:1,2,3,4,5
和 (1,2,3,4,5)
由此可见args是吧元素打包成一个元组了,同理,如果传入**kwargs,然后打印kwargs,是把成对的元素打包成一个字典输出。

然后,当使用嵌套函数时,外层函数,内层函数,同时传入args,那么最后内层函数会使用哪一组args呢?请看:
在这里插入图片描述
最后求sum(*args)时,用的是哪一组呢,毫无疑问,用的是(3,4),最后打印出7.请牢记:就近原则,如果内层函数没有接收参数,则他可以用外层函数的参数:
在这里插入图片描述
这里,它最后返回3.

其实,外层函数的参数和内层函数的参数可以一起传给内层函数,最终返回一个由两者共同决定的值:
在这里插入图片描述
最后返回15.

还要注意*args后面的参数都会变成关键字参数,和只有一个 星号作用相同:

def func(*args,name,age):
		print(args,name, age)
func(1,2,3,4,name='sd',age=19)

最终会打印出(1,2,3,4) sd 19
和:

 		def add(x,*,y,z):
			print(x,y,z)

一样,调用的时候需要这样:

		add(5,y=7,z=9)

猜你喜欢

转载自blog.csdn.net/qq_43281207/article/details/83719446
今日推荐