栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

类属性评估和生成器

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

类属性评估和生成器

是的,这有点狡猾。一个类并没有真正引入新的作用域,只是看起来有点像它。这样的结构暴露出差异。

这个想法是,当您使用生成器表达式时,它等同于使用lambda:

class Brie(object):    base= 2    powers= map(lambda i: base**i, xrange(5))

或明确地作为函数语句:

class Brie(object):    base= 2    def __generatePowers():        for i in xrange(5): yield base**i    powers= list(__generatePowers())

在这种情况下,很显然,这

base
并不适用
__generatePowers
;两者都会导致异常(除非您很不幸也有一个
base
全局变量,在这种情况下您会得到错误)。

对于列表推导这不会发生,这是由于一些内部细节来评估它们的方式,但是在Python
3中这种行为消失了,在两种情况下都会同样失败。这里有一些讨论。

可以使用lambda的一种解决方法,该技术与我们在nested_scopes出现之前的糟糕年代所依赖的技术相同:

class Brie(object):    base= 2    powers= map(lambda i, base= base: base**i, xrange(5))


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/661790.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号