首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python3.x内置函数现在返回类型

Python3.x内置函数现在返回类型
EN

Stack Overflow用户
提问于 2014-09-22 22:26:36
回答 1查看 86关注 0票数 2

当我不在的时候,Python (3.4)内置函数发生了一些奇怪的事情。像mapzip这样的函数现在返回对象(不是列表或元组)。

代码语言:javascript
运行
复制
In [34]: map(lambda x:1, [1,2,3])
Out[34]: <map at 0x7fe27a15dac8>
  1. 这些内容是什么时候添加到Python中的?
  2. 为什么要加呢?
  3. 而且,最重要的是,这会不会打破我的任何密码?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-22 22:30:37

简短答案:这些是可迭代的,用于防止在只需要有限数量的元素时分配整个列表。自3.0以来

我猜这些都是惰性函数调用(或coroutines)。

惰性函数调用返回一个仅在需要时才计算对象的对象。

例如,假设您有一个1M项列表,但是您只需要映射的第一个3。然后迭代器,只计算前三个。

这也可以用于对无限列表执行操作。假设你有一个所有素数的列表。这是一个迭代器。当然,您永远不能存储所有的素数。如果真的有必要的话,你只能计算下一个。

基于文档,我可以说是3.0?

为了发出迭代器中的所有项并将它们转换为列表,可以使用list函数:

代码语言:javascript
运行
复制
>>> list(map(lambda x:1, [1,2,3]))
[1, 1, 1]

示例无限列表。

假设您使用了旧的list [1,2,3],但是现在您需要一个重复给定列表的列表,这样总长度是k,而不是自己执行所有的演算(例如,确定最后一个元素是什么,您可以执行):

代码语言:javascript
运行
复制
>>> from itertools import *
>>> list(islice(cycle([1,2,3]),20))
[1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2]

换句话说,您可以在无限迭代器1、2、3、1、2、3、.上执行操作。不要在这样的迭代器上执行list ,它们会导致内存不足的异常.

文档所示,您还可以接受nth元素:

代码语言:javascript
运行
复制
def nth(iterable, n, default=None):
    "Returns the nth item or a default value"
    return next(islice(iterable, n, None), default)

例如,确定无限斐波纳契序列的元素1337是否为偶数:

代码语言:javascript
运行
复制
def fibbonacci():
    i = 0
    j = 1
    while True :
        yield j
        k = j
        j = i+j
        i = k

nth(fibbonacci(),1337)
1887894200332450578485872635131438888682034332759626203734370221207918536632734791920258721345445695603925109666619483005485820744328669636758022665585261815175601673908370933079008727762461226800205778071936133115682958306317629552911384353679816770236462076654822205794785629944

换句话说,您可以定义一个序列,该序列能够计算每个元素,并且仍然可以对第一个nk-th,……执行算术运算。而不必将所有这些值显式地存储在列表本身中。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25984025

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档