查看“Python生成器推导式”的源代码
←
Python生成器推导式
跳转至:
导航
,
搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
==生成器推导式== *生成器推导式(generator expression)的用法与列表推导式非常相似,在形式上生成器推导式使用'''圆括号(parentheses)'''作为定界符,而不是列表推导式所使用的方括号(square brackets)。 *与列表推导式最大的不同是,生成器推导式的结果是一个'''生成器对象'''。生成器对象类似于迭代器对象,具有惰性求值的特点,只在需要时生成新元素,比列表推导式具有更高的效率,空间占用非常少,尤其适合大数据处理的场合。 *使用生成器对象的元素时,可以根据需要将其转化为列表或元组,也可以使用生成器对象的__next__()方法或者内置函数next()进行遍历,或者直接使用for循环来遍历其中的元素。但是'''不管用哪种方法访问其元素,只能从前往后正向访问每个元素,没有任何方法可以再次访问已访问过的元素,也不支持使用下标访问其中的元素。当所有元素访问结束以后,如果需要重新访问其中的元素,必须重新创建该生成器对象''',enumerate、filter、map、zip等其他迭代器对象也具有同样的特点。 *使用生成器对象__next__()方法或内置函数next()进行遍历 <nowiki>>>> g = ((i+2)**2 for i in range(10)) #创建生成器对象 >>> g <generator object <genexpr> at 0x0000000003095200> >>> tuple(g) #将生成器对象转换为元组 (4, 9, 16, 25, 36, 49, 64, 81, 100, 121) >>> list(g) #生成器对象已遍历结束,没有元素了 [] >>> g = ((i+2)**2 for i in range(10)) #重新创建生成器对象 >>> g.__next__() #使用生成器对象的__next__()方法获取元素 4 >>> g.__next__() #获取下一个元素 9 >>> next(g) #使用函数next()获取生成器对象中的元素</nowiki> *使用for循环直接迭代生成器对象中的元素 <nowiki>>>> g = ((i+2)**2 for i in range(10)) >>> for item in g: #使用循环直接遍历生成器对象中的元素 print(item, end=' ') 4 9 16 25 36 49 64 81 100 121</nowiki> *访问过的元素不再存在 <nowiki>>>> x = filter(None, range(20)) #filter对象也具有类似的特点 >>> 5 in x True >>> 2 in x #不可再次访问已访问过的元素 False >>> x = map(str, range(20)) #map对象也具有类似的特点 >>> '0' in x True >>> '0' in x #不可再次访问已访问过的元素 False</nowiki> 返回 [[Python组合数据类型]]
返回至
Python生成器推导式
。
导航菜单
个人工具
登录
命名空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
随机页面
帮助
工具
链入页面
相关更改
特殊页面
页面信息