關於不定長引數*args的思考
阿新 • • 發佈:2018-11-10
不定長引數*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)