总结:涉及到函数,*号的作用在于收集参数或者分配参数。
1. 如果在定义函数时,*代表收集参数,**代表收集关键字参数。
2. 如果在调用函数时,*和**都是分配参数用的
单个*号
形参——单个星号代表这个位置接收任意多个非关键字参数,转化成元组方式。(定义函数)
实参——如果 * 号加在了是实参上,代表的是将输入迭代器拆成一个个元素。(调用函数)
从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()容器的好处,引用方便。
两个*号
形参——单个星号代表这个位置接收任意多个关键字参数,转化成字典方式。(定义函数)
实参——如果 ** 号加在了是实参上,代表的是将字典键值赋给对应变量。(调用函数。