作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
下面是我的部分类定义:
class Trial:
font = pygame.font.Font(None, font_size)
target_dic = {let: font.render(let, True, WHITE, BG) for let in list("ABCDEFGHJKLMNPRSTUVWX")}
部分类定义的最后一行,target_dic = {let: font.render(let, True, WHITE, BG) for let in list("ABCDEFGHJKLMNPRSTUVWX")
返回错误:global名称“字体”未定义。很公平。
然而,我尝试了以下测试用例并没有出现错误:
class x:
dat = 1
datlist = [dat for i in range(10)]
为什么第一种情况不可行?在达到字典理解时,成员 font
是否存在?
我是否需要将这些操作移动到 __init__
或者是否可以在创建类对象时只定义一次列表?
编辑:
为清楚起见,我希望能够在创建类对象时填充列表,以减少创建 Trial 对象所花费的时间。
最佳答案
部分回答,更多的是为了减少一些错误的路径。
如果我拿回你的工作样本并进行听写理解:
class x:
dat = 1
datlist = {i:dat for i in range(10)}
我也明白了:
>>> NameError: global name 'dat' is not defined
所以看起来字典理解隐藏了类语句执行期间临时使用的字典,但列表理解没有。
目前在文档中找不到关于此的更多信息...
根据@interjay 评论编辑:不满足范围规范的类构造在此 post 中得到解决.简而言之,列表理解在 2.x 中存在错误并且可以看到类成员,但他们不应该看到。
关于python - 执行类定义中的语句 : Which variables does the interpreter know about?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10787727/
我是一名优秀的程序员,十分优秀!