Python函数传参(二) —— *args,**kwargs(可变参数)(一次性传多个参数)

*args,**kwargs属于可变参数

args即为arguments,kwargs即为key-word arguments

如果函数参数中有*或**,你想再添加新的参数,把他们放在*或**参数前面

像我想添加args

def get_loss(self, loss, outputs, targets, indices, num_boxes, args=None, **kwargs):

* 会将传入的参数放入名为args的元组
** 会将传入的参数放入名为kwargs的字典中,仅对关键字参数传入有效

def test(a,b,c=3,*args):
    print(a)
    print(b)
    print(c)
    print(args)
test(11,22,33,44,55)

args中保存的是没有利用的所有多余参数,保存方式为元组tuple

def test(a,b,c=3,*args,**kwargs):  
    print(a)  
    print(b)  
    print(c)  
    print(args)
    print(kwargs)  
test(11,22,33,dd=44,ee=55,ff=66)  

而如果输入多余参数有变量名,就保存在**kwargs中保存,保存方式为字典dict

如果多余参数中既有*args类型,也有**kwargs类型,则分别保存

当我们想基于某个现有的函数,在添加一个参数扩充成我们自己的当前函数

例如wandb函数,pytorch lightning中的WandbLogger就是在wandb本身本身函数的基础上添加了一些pytorch lightning的函数写成的

但是又想让用户在给WandbLogger传参的时候,就可以把wandb哈函数的一些参数直接传进去,就可以用kwargs

class WandbLogger(LightningLoggerBase):
def __init__(
        self,
        name: Optional[str] = None,
        save_dir: Optional[str] = None,
        offline: Optional[bool] = False,
        id: Optional[str] = None,
        anonymous: Optional[bool] = None,
        version: Optional[str] = None,
        project: Optional[str] = None,
        log_model: Optional[bool] = False,
        experiment=None,
        prefix: Optional[str] = "",
        **kwargs,
    ):

        ......
        self._wandb_init.update(**kwargs)


 

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值