背景案例
示例:
- 寻找出现次数最多的列表
def mode(lst):
if len(lst)==0:
return None
else:
a = max(lst, key=lambda x: lst.count(x))
return a
- 寻找最长的列表
def longest_lst(*lists):
a = max(*lists, key=lambda x: len(x))
return a
w = longest_lst([1,2], [2,4,6,2,7,8,4,2], [7,2,4,7])
print(w) # [2, 4, 6, 2, 7, 8, 4, 2]
讲解:longest_lst函数被传入3个实参,分别是三个list。如图所示,list变量指向最下面的tuple示例:
*args 和 **kwargs
- 使用场景:你可以将不定数量的参数传递给一个函数。不定的意思是:预先并不知道, 函数使用者会传递多少个参数给你, 所以在这个场景下使用这两个关键字。其实并不是必须写成 *args 和 **kwargs。 *(星号) 才是必须的. 你也可以写成 *ar 和 k 。而写成 *args 和kwargs 只是一个通俗的命名约定。
- *args 表示任何多个无名参数,它本质是一个 tuple。
- **kwargs 表示关键字参数,它本质上是一个 dict。
def fun(*args, **kwargs):
print('args=', args)
print('kwargs=', kwargs)
fun(1, 2, 3, 4, A='a', B='b', C='c', D='d')
> args= (1, 2, 3, 4)
> kwargs= {'A': 'a', 'B': 'b', 'C': 'c', 'D': 'd'}
- 关于*args,输入是list
def fun(name, *args):
print("你好", name)
for i in args:
print("I like ", i)
return None
a = fun("bobo", "rourou", "chuck", "xiaohuihui")
> 你好 bobo
> I like rourou
> I like chuck
> I like xiaohuihui
- 关于**kwargs,输入是dictionary
def fun2(**kwargs):
for key, value in kwargs.items():
print("{0} like {1}".format(key, value))
return None
fun2(a="b", c="d")
> a like b
> c like d
- 给一个函数插入可变参数
def test_function(a,b,*args,**kwargs):
print a
print b
print args
print kwargs
test_function(0,1,2,3,index1=11,index2=12)
> 0
> 1
> (2,3)
> {'index1':11,'index2':12}