python写人工智能的时候发现一个作用域的问题,为什么在for循环中的out_channels可以在return中是同一个,他不应该是一个局部变量吗?
def vgg(conv_arch):
conv_blks = []
in_channels = 1
for num_convs, out_channels in conv_arch:
conv_blks.append(vgg_block(num_convs, in_channels, out_channels))
in_channels = out_channels
return nn.Sequential(
*conv_blks, nn.Flatten(),
nn.Linear(out_channels * 7 * 7, 4096), nn.ReLU(),
nn.Linear(4096, 4096), nn.ReLU(),
nn.Linear(4096, 10)
)
python作为解释型的编程语言,它的作用域只分全局和局部(函数外定义,函数内定义),没有块的概念
所以for循环里定义的变量,for循环结束后依然有效
-=-=
ps:同样的,你可以在条件分支里定义变量,而不需要预先定义
或者也可以说,python里的变量就是不需要定义的,你如果熟悉java或者c#,你可以理解成所有变量都是引用的object类型的字典,变量的值就是字典的值,字典里没有对应的key就返回None