1. 程式人生 > >關於不定長引數*args的思考

關於不定長引數*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)