今天看程序遇到列表前加星号的情况:
def _make_layer(self, block, planes, blocks, stride=1, use_se=True, anti_alias_layer=None):
downsample = None
if stride != 1 or self.inplanes != planes * block.expansion:
layers = []
if stride == 2:
# avg pooling before 1x1 conv
layers.append(nn.AvgPool2d(kernel_size=2, stride=2, ceil_mode=True, count_include_pad=False))
layers += [conv2d_ABN(self.inplanes, planes * block.expansion, kernel_size=1, stride=1,
activation="identity")]
downsample = nn.Sequential(*layers)
layers = []
layers.append(block(self.inplanes, planes, stride, downsample, use_se=use_se,
anti_alias_layer=anti_alias_layer))
self.inplanes = planes * block.expansion
for i in range(1, blocks): layers.append(
block(self.inplanes, planes, use_se=use_se, anti_alias_layer=anti_alias_layer))
return nn.Sequential(*layers)
简单的说就是把列表中的元素都拆开,作为参数传递给函数,方便程序书写。
例如:
# -*- coding:utf-8 -*-
def add(a, b):
return a+b
data = [4,3]
print add(*data)
#equals to print add(4, 3)
data = {'a' : 4, 'b' : 3}
print add(**data)#两个星号是把字典中的元素分开成独立的元素
#equals to print add(4, 3)
更直观的
a=[1,2,3]
print(a,"",*a)
[1, 2, 3] 1 2 3
b=(1,2,3)
print(b,"z",*b)
(1, 2, 3) z 1 2 3