python函数形参* 和 **

背景案例

示例:

  • 寻找出现次数最多的列表
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}
  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值