在这种情况下,group.setdefault()会做什么?

时间:2019-11-20 15:21:12

标签: python python-3.x pytorch

我看了文档[https://docs.python.org/2/library/stdtypes.html#dict.setdefault]

  

setdefault(key [,default]):

     

如果键在字典中,请返回其值。

     

如果没有,请插入具有默认值的密钥并返回默认值。默认默认为无

但是,看到group.setdefault()的输出没有保存在变量中。我觉得这很奇怪。 更具体地说,此代码包含在调度程序的类的定义中。我正在使用pytorch,而我是新手,因此在理解代码方面遇到困难。因此,任何可以解决这个问题的python / pytorch忍者?

这是该课程的简化版本:

     class BaseLRScheduler(_LRScheduler):
         def __init__(self, optimizer, last_epoch=-1):

             self.optimizer = optimizer
             if last_epoch == -1:
                for group in optimizer.param_groups:
                    group.setdefault('initial_lr', group['lr'])


             self.base_lrs = list(
                  map(lambda group: group['initial_lr'], optimizer.param_groups))
             self.step(last_epoch + 1)
             self.last_epoch = last_epoch

这对我来说是代码中有问题的部分:

     if last_epoch == -1:
         for group in optimizer.param_groups:
              group.setdefault('initial_lr', group['lr'])

1 个答案:

答案 0 :(得分:0)

函数返回值的事实并不意味着必须使用该值。

在这种情况下,
如果'initial_lr'在字典中,则什么也不会发生,但是
如果'initial_lr'不在词典中,请插入其值group['lr']

例如:

d = {'a': 1}
d.setdefault('a', 2)
print(d)
d.setdefault('b', 3)
print(d)

输出

{'a': 1}
{'a': 1, 'b': 3}