You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

类中用列表推导式为何row_num报NameError而column_num正常?

类中嵌套列表推导式的作用域问题解析

核心原因是Python类定义里,嵌套的内层列表推导式与外层推导式的作用域规则存在差异:

  • 外层列表推导式(for x in range(column_num))处于类体的作用域内,能够直接访问类中已定义的column_num变量,因此不会报错。
  • 内层列表推导式(for i in range(row_num))会生成一个独立的局部作用域,这个作用域无法直接读取类级别的变量(也就是类里定义的row_num),所以会触发NameError。

当你给row_num加上global声明后,它被提升为全局变量,内层推导式可以访问全局作用域的变量,因此不再报错;而column_num因为在外层推导式中使用,依然能正常访问类内的变量,所以没有问题。

更合理的写法不需要依赖全局变量,直接通过类名访问类变量即可让内外层推导式都正常工作:

class Game:
    row_num = 7
    column_num = 6
    board = [['[]' for i in range(Game.row_num)] for x in range(column_num)]

内容的提问来源于stack exchange,提问作者yerdeth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 22:30:53