importSharp 2021-11-18 11:02 采纳率: 53.8%
浏览 17
已结题

python中函数内部变量的作用域问题

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)
    )
  • 写回答

1条回答 默认 最新

  • 於黾 2021-11-18 11:05
    关注

    python作为解释型的编程语言,它的作用域只分全局和局部(函数外定义,函数内定义),没有块的概念
    所以for循环里定义的变量,for循环结束后依然有效
    -=-=
    ps:同样的,你可以在条件分支里定义变量,而不需要预先定义
    或者也可以说,python里的变量就是不需要定义的,你如果熟悉java或者c#,你可以理解成所有变量都是引用的object类型的字典,变量的值就是字典的值,字典里没有对应的key就返回None

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 11月26日
  • 已采纳回答 11月18日
  • 创建了问题 11月18日

悬赏问题

  • ¥15 如何解决y_true和y_predict数据类型不匹配的问题(相关搜索:机器学习)
  • ¥15 PB中矩阵文本型数据的总计问题。
  • ¥40 宿舍管理系统设计(c#)
  • ¥15 MATLAB卫星二体模型仿真
  • ¥15 怎么让数码管亮的同时让led执行流水灯代码
  • ¥20 SAP HANA SQL Script 。如何判断字段值包含某个字符串
  • ¥85 cmd批处理参数如果含有双引号,该如何传入?
  • ¥15 fx2n系列plc的自控成型机模拟
  • ¥15 时间序列LSTM模型归回预测代码问题
  • ¥50 使用CUDA如何高效的做并行化处理,是否可以多个分段同时进行匹配计算处理?目前数据传输速度有些慢,如何提高速度,使用gdrcopy是否可行?请给出具体意见。