文章目录
操作符
一、 * 号用法
1. 乘号
2. 形参——单个星号代表这个位置接收任意多个非关键字参数,转化成元组
方式。
def __init__(self, *args): # 作为形参传入,转换成`元组`的形式
super(Sequential. self).__init__()
if len(args) == 1 and isinstance(args[0], OrderDict):
for key, module in args[0].items():
self.add_module(key, module)
else:
for idx, module in enumerate(args):
self.add_module(str(idx), module)
3. 实参——如果*号加在了是实参上,代表的是将输入迭代器拆成一个个元素。
从nn.Sequential的定义来看,输入要么是orderdict
,要么是一系列的模型
,遇到list,必须用*号进行转化,否则会报错 “TypeError: list is not a Module subclass”
Eg:
cfg = [64,64,'M',128,128,'M',256,256,256,'M',512,512,512,'M',512,512,512,'M']
layers= []
for v in cfg:
if v == 'M':
layers += [nn.MaxPool2d(kernel_size=2,stride = 2)]
else:
conv2d = nn.Conv2d(in_channels,v,kernel_size=3,padding = 1)
if batch_norm:
layers += [conv2d,nn.Batchnorm2d(v),nn.ReLU(inplace=True)]
else:
layers += [conv2d,nn.ReLU(inplace=True)]
in_channels = v
# use the vgg layers to get the feature
self.features = nn.Sequential(*layers)
'''
这里 nn.Sequential 输入的是一个列表,所以要用 * 进行转化。
也可以写成:
nn.Sequential(OrderedDict([ #orderdict按照建造时候的顺序进行存储
('conv1', nn.Conv2d(64,64,3)),
('relu1', nn.ReLU()),
('maxpool1', nn.MaxPool2d(2,2)),
('conv2', nn.Conv2d(64,128,3)),
('relu2', nn.ReLU()),
('maxpool2', nn.MaxPool2d(2,2))
]))
'''
二、** 号用法
1. 幂指数表示符
2. 形参–代表这个位置接收任意多个带有关键字参数,转化成字典
方式。
如果同时使用 *args 和 **kwargs 时,必须 *args 参数列要在 **kwargs 之前
。
def fun(*args, **kwargs):
print('args=', args)
print('kwargs=', kwargs)
fun(1, 2, 3, 4, A='a', B='b', C='c', D='d')
'''
输出结果:
args= (1, 2, 3, 4)
kwargs= {'A': 'a', 'B': 'b', 'C': 'c', 'D': 'd'}
'''
内置函数
1. isinstance() 函数
函数作用:
判断一个对象是否是一个已知的类型,类似 type()。
isinstance() 与 type() 区别:
type() 不会认为子类是一种父类类型,不考虑继承关系
。
isinstance() 会认为子类是一种父类类型,考虑继承关系
。
如果要判断两个类型是否相同推荐使用 isinstance()。
class A:
pass
class B(A):
pass
isinstance(A(), A) # returns True
type(A()) == A # returns True
isinstance(B(), A) # returns True
type(B()) == A # returns False
- 本人会不定时更新当前博文,因为这也是一个积累的工程,如果有不会的也可以问我,然后我会加进去的。
2. lambda() 函数
2.1 函数作用
- 指
短小
的回调函数。 - 需要一个函数,但是又不想费神去命名一个函数的场合下使用。
参考资料
- https://www.runoob.com/python/python-func-isinstance.html