def __init__(self, *args, **kwargs)
def init(self, *args, **kwargs): 其含义代表什么?
*args:如果是没有指定key的参数,比如单单‘apple’,‘people’,即为无指定,则会以list的形式放在args变量里面
**kwargs:如果是有指定key的参数,比如item=‘apple’这种形式,即为有指定,则会以dict的形式放在kwargs变量里面
参考:https://blog.youkuaiyun.com/Jiana_Feng/article/details/107861130
def test_demo(*args):
print(len(args))
for i in args:
print(i)
test_list = [9,6,1]
test_demo(test_list) 像这样,传入的 test_list 前面没有加 *,其传入到 test_demo 默认作为tuple,tuple里面是一个list参数,就是args = [9,6,1]
但是:
test_demo(*test_list) 加了 * 就会把 test_list 打散了,作为三个值传入,
所以,在看到:
nn.Sequential(*[m(*args) for _ in range(n)]) 这种参数前面加* ,是为了把[m(*args) for _ in range(n)] -> list 中的值打散了,作为多个值传入,如果不加,就是一个tuple,tuple里面是一个list,nn.Sequential 内部解析会报错:(并不是说一个方法如:test_demo(*args),这个方法就不能传list了,不是这样的,只是传入要符合对应的方法中的要求)
之前一直对 nn.Sequential参数为啥加 * 不理解,现在稍微理解了点,当然,如果就一个 subclass,那就直接加到 nn.Sequential(subclass)中了,加* 是对于list而言,就是要把list中的值打散了,传进去就不是list,而是各个值。