*args和**kwargs

*args和**kwargs的区别

        首先*args和**kwargs的区别主要是*和**的区别,与变量名args和kwargs无关,也可以命名成*cat和**dog;*args接收不带变量名的变量,**kwargs接收带变量名的变量。*args和**kwargs可以共同使用,但是顺序一定是先*args,再**kwargs

*args

        *args接收多余的不带变量名的变量,如图中的3,4,5,6,7,并保存为tuple,就可以用遍历和索引方式访问args,比如这里将args[0]赋给变量key_size

def f(x, y, *args):
    print("x = ", x)
    print("y = ", y)
    print("args = ", args)
    print(type(args))
    key_size = args[0]
    print("key_size = ", key_size)


f(1, 2, 3, 4, 5, 6, 7)

**kwargs

        **kwargs接收多余的带变量名的变量,并保存为dict

def f(x, y, **kwargs):
    print("x = ", x)
    print("y = ", y)
    print("kwargs = ", kwargs)
    print(type(kwargs))
    for k in kwargs:
        print(k, kwargs[k])
    e = kwargs['e']
    print("")
    print("e:", e)




fun(1, 2, c=3, d=4, e=5, f=6, g=7)

关于*args和**kwargs的作用

  • 别人可能会传一些多余的参数进来,如果你函数里没有做相应的接收,程序就会报错,加了**kwargs或者*args可以把这些参数忽略掉,避免程序报错

  • 可以让你的参数长度是可变的,比如nn.sequential,pytorch不知道你需要叠加多少层,就让你先把要堆叠的层先传进去,后续可以自由在nn.sequential中增加层数,然后再遍历你传进来的参数

  • 考虑的是函数的复用,比如一个计算器函数,事先并不知道用户实际会进行什么运算,不同的计算传递的参数也会不一样,这时候就要用到*args,如以下代码

  • 用在装饰器中

def calc(f, *args):
    print(f(*args))


def add(a, b):
    return a+b


def power(x):
    return x**2


calc(add, 2, 3)
calc(power, 2)
#输出5   4
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值