类中用列表推导式为何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
相关产品推荐
相关产品推荐

