4.6函數的默認(缺省)參數和不定長參數
4.6.1默認參數
函數在定義的時候就已經給這個參數賦了值。
(1)經驗:
①默認參數可以不傳實參,如果傳遞實參就修改默認參數的值
②定義默認參數的時候,默認參數要寫到位置參數的後面。如果同時有*args和**kwargs以及默認參數,則順序爲:*args——默認參數——**kwargs
③默認參數可以關鍵字參數傳值,但要寫到位置參數的後面
(2)默認參數儘量不要是可變數據類型
4.6.2不定長參數
基本語法:
寫法一:*args 不確定位置參數個數時,收集成元組
#*args:位置參數,收集成元組
def func1(*args):
print(args)
for i in args:
print(i)
func1('python', 28, 'man','meiguo')
寫法二:**kwargs 不確定關鍵字參數個數時,合併成字典
# **kwargs :收集關鍵字參數,合併字典
def func2(**kwargs):
print(kwargs)
for key,value in kwargs.items():
print(key)
print(value)
func2(name='python',age=28,sex='man',weizhi='helan')
注意:
(1)在定義函數時,不定長參數都放到最後
(2)不定長參數可以不接收值
經典例子:
def func1(a, *args, b=1, **kwargs):
print(args)
for i in args:
print(i)
print(kwargs)
for key, value in kwargs.items():
print(key)
print(value)
func1(1,'name', 'python', 'age',28,b=2,name='python')
#注意:調用函數參數時的順序爲必須傳遞的參數在最左邊,然後是多餘的位置參數、關鍵字參數,最後是多餘的關鍵字參數
4.7匿名函數(即:lambda表達式)
語法:
lambda 參數:返回值(or表達式)#注意:不需要寫return
如:
print((lambda :100)())
f = lambda a,b : a + b
print(f(10, 20))
f = lambda a,b,c=100: a + b + c
print(f(10, 20,200))
print( (lambda *args:args)(20, 30, 40) ) #得到一個(20,30,40)的元組
#args的列表和a和b做合併
print((lambda *args,a=100,b=200:list(args) + [a, b])(10, 20, 30))
print((lambda **kwargs:kwargs)(name='python',age=28)) #返回一個字典
#實現鍵值對互轉:
print((lambda **kwargs:{value:key for key,value in kwargs.items()})(name='python',age=28))
重要用途:
(1)lambda可以作爲函數的一個參數使用
如:
def test(a, b, xxx):
return xxx(a, b)
result = test(11, 22, lambda x, y: x-y)
# 此處的減號可改爲其它符號,改成什麼符號做什麼運算
print(result)
(2)帶判斷的lambda
#a,b,對比大小 返回最大值
print((lambda a,b :a if a>b else b)(1000, 20))
#a,b,c,對比大小 返回最大值
print((lambda a,b,c:c if c > (a if a>b else b) else (a if a>b else b))(100, 2000, 30))
(3)用在sort中可以按照鍵名快速排序
info_list=[
{'name':'zhansan','age':20},
{'name':'lisi','age':18},
{'name':'laowang','age':30}
]
info_list.sort(key=lambda info:info['age'],reverse=True)
print(info_list)