【python】*号用法总结 如nn.Sequential(*layers) ,ResNet(Bottleneck, [3, 4, 6, 3], **kwargs)

总结:涉及到函数,*号的作用在于收集参数或者分配参数。

1. 如果在定义函数时,*代表收集参数,**代表收集关键字参数。

2. 如果在调用函数时,*和**都是分配参数用的

单个*号

形参——单个星号代表这个位置接收任意多个非关键字参数,转化成元组方式。(定义函数)
实参——如果 * 号加在了是实参上,代表的是将输入迭代器拆成一个个元素。(调用函数)
【python】*号用法总结 如nn.Sequential(*layers) ,ResNet(Bottleneck, [3, 4, 6, 3], **kwargs)_第1张图片
从nn.Sequential的定义来看,输入要么是orderdict,要么是一系列的模型,遇到list,必须用*号进行转化,否则会报错 TypeError: list is not a Module subclass

# Example of using Sequential with OrderedDict
model = nn.Sequential(OrderedDict([           #orderdict按照建造时候的顺序进行存储
          ('conv1', nn.Conv2d(1,20,5)),
          ('relu1', nn.ReLU()),
          ('conv2', nn.Conv2d(20,64,5)),
          ('relu2', nn.ReLU())
        ]))

nn.Sequential()容器的好处,引用方便。

两个*号

形参——单个星号代表这个位置接收任意多个关键字参数,转化成字典方式。(定义函数)
实参——如果 ** 号加在了是实参上,代表的是将字典键值赋给对应变量。(调用函数。

你可能感兴趣的:(python,开发语言)