Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 迭代器在python中的用途是什么?我们已经有了循环_Python 3.x_For Loop_Time_Iterator_Time Complexity - Fatal编程技术网

Python 3.x 迭代器在python中的用途是什么?我们已经有了循环

Python 3.x 迭代器在python中的用途是什么?我们已经有了循环,python-3.x,for-loop,time,iterator,time-complexity,Python 3.x,For Loop,Time,Iterator,Time Complexity,迭代器在python中的用途是什么?相反,我们可以向右循环。 下面是我的代码,它计算两个操作的时间 * 请发布您的反馈。 提前谢谢 输出: 5.00525975227356 2.208195924758911简短回答 my+1Generator (n+1 for n in numbers) 以下是如何使用迭代器改进代码的示例: // WITHOUT ITERATORS hours_worked = 0 for event in events: if event.is_billabl

迭代器在python中的用途是什么?相反,我们可以向右循环。 下面是我的代码,它计算两个操作的时间 *

  • 请发布您的反馈。 提前谢谢
输出:

5.00525975227356
2.208195924758911

简短回答

my+1Generator (n+1 for n in numbers)
以下是如何使用迭代器改进代码的示例:

// WITHOUT ITERATORS
hours_worked = 0
for event in events:
    if event.is_billable():
        hours_worked += event.duration

// WITH ITERATORS
// create an iterators with the duration of the billable event.
billable_times = (event.duration for event in events if event.is_billable())
hours_worked = sum(billable_times)
// WITHOUT ITERATORS
hours_worked = 0
for event in events:
    if event.is_billable():
        hours_worked += event.duration

// WITH ITERATORS
// create an iterators with the duration of the billable event.
billable_times = (event.duration for event in events if event.is_billable())
hours_worked = sum(billable_times)
使用迭代器,我们命名了以前未命名的东西,现在可以使用sum函数。命名使我们的代码更具描述性和可读性

在此处了解更多信息:

长答案

my+1Generator (n+1 for n in numbers)
Python不像其他编程语言那样具有相同的
for
循环。您可能知道,在JavaScript中,“
for
循环”是这样写的:

let myList = ["apple", "banana", "blueberry"];
for (let i = 0; i < myList.length; i += 1) {
    print(myList[i])
}
for n in my+1Generator:
    print(n)
如您所见,在Python中没有索引初始化、递增和检查。在Python中,
myList
被称为iterable它是可以使用for循环进行循环的所有内容

序列是iterable的一种类型,但具有索引、长度等附加功能,并且可以切片。例如:字符串、元组和列表是可编辑的和序列,而字典只是可编辑的。(您不能使用字典
myDict[1]
)执行此操作。 在Python中,我们不能通过使用索引手动循环每个iterable,它只适用于序列

那么,如果Python“
for
循环”可以使用索引,那么它们是如何工作的呢?他们使用迭代器的强大功能。迭代器是驱动iterable的东西,你可以从每个iterable中得到一个迭代器,这是你在代码中使用
iter(a)
时所做的事情

您可以将迭代器视为不能重新加载的Pez分配器。你可以把Pez拿出来,但是一旦一个Pez被移除,它就不能再放回去,而且一旦分配器是空的,它就没用了

资料来源:

因此,在Python中,for循环的工作方式如下:

def for(iterable, action)
    iterator = iter(iterable)
    looping_finished = false
    while not looping_finished:
        try:
            item = next(iterator)
        except StopIteration:
            looping_finished = true
        else:
            action(item)
但是为什么我们关心迭代器呢?因为在Python中,直接使用迭代器是很常见的

下面是Python生成器的一个基本示例

my+1Generator (n+1 for n in numbers)
生成器是迭代器,这意味着您可以这样做:
next(my+1Generator)
,您也可以像这样循环生成器:

let myList = ["apple", "banana", "blueberry"];
for (let i = 0; i < myList.length; i += 1) {
    print(myList[i])
}
for n in my+1Generator:
    print(n)
如果你能把它绕过去,它就是一个可折叠的。因此,生成器既是迭代器,也是可重用的

令人惊讶的是,所有迭代器都是一样的。实际上,您可以这样做:

numbers = [1, 2, 3]
iterator1 = iter(numbers)
iterator2 = iter(iterator1)
print (iterator1 is iterator2) // Output: "True"
迭代器没有长度,无法编制索引。例如:
enumerate
reverse
zip
map
是Python中的迭代器。迭代器最重要的是它们的惰性。他们把工作推迟到你要下一个项目

您可以自己创建迭代器。以下是一个例子:

class add1_all:
    def __init__(self, numbers):
        self.numbers = iter(numbers)
    def __next__(self):
        return next(self.numbers) + 1
    def __iter__(self):
        return self
但通常迭代器由一个生成器函数组成:

def add1_all(numbers):
    for n in numbers:
        yield n+1
这两个代码示例是等效的,工作方式相同
yield
允许我们暂停执行
add1\u all
函数,直到调用
next
函数

以下是如何使用迭代器改进代码的示例:

// WITHOUT ITERATORS
hours_worked = 0
for event in events:
    if event.is_billable():
        hours_worked += event.duration

// WITH ITERATORS
// create an iterators with the duration of the billable event.
billable_times = (event.duration for event in events if event.is_billable())
hours_worked = sum(billable_times)
// WITHOUT ITERATORS
hours_worked = 0
for event in events:
    if event.is_billable():
        hours_worked += event.duration

// WITH ITERATORS
// create an iterators with the duration of the billable event.
billable_times = (event.duration for event in events if event.is_billable())
hours_worked = sum(billable_times)
资料来源: