Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.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 生成器和函数_Python_Python 3.x_Generator - Fatal编程技术网

Python 生成器和函数

Python 生成器和函数,python,python-3.x,generator,Python,Python 3.x,Generator,我不知道这里发生了什么。今天是我第一次涉足发电机领域。我把它放到了pythontutor可视化工具中,但我不明白为什么会发生这种情况。可视化工具弹出“生成器返回实例”。我读过其他与我相似的SO线程,但不幸的是我不理解为什么会这样。除了这个特定的问题,我非常感谢任何关于学习正确有效地使用生成器的好方法的想法。谢谢大家! def even(nums): for number in nums: if number % 2 == 0: yield num

我不知道这里发生了什么。今天是我第一次涉足发电机领域。我把它放到了pythontutor可视化工具中,但我不明白为什么会发生这种情况。可视化工具弹出“生成器返回实例”。我读过其他与我相似的SO线程,但不幸的是我不理解为什么会这样。除了这个特定的问题,我非常感谢任何关于学习正确有效地使用生成器的好方法的想法。谢谢大家!

def even(nums):
    for number in nums:
        if number % 2 == 0:
             yield number


def find_evens(number_list):
    return even(number_list)

>>> find_evens([1,2,3,4,5,6])
<generator object even at 0x104f7af10>
def偶数(nums):
对于NUM中的数字:
如果数字%2==0:
产量
def查找(编号列表):
返回偶数(数字列表)
>>>发现偶数([1,2,3,4,5,6])

Python REPL只是返回生成器对象的默认表示形式

生成器无法自行生成其值,必须强制生成。存在许多强制选项,例如将其包装在
列表中

list(find_evens([1,2,3,4,5,6]))
[2, 4, 6]
或者,类似地,通过迭代:

for i in find_evens([1, 2, 3, 4, 5, 6]):
    print(i)
这两个示例(循环,调用
列表
)都将调用生成器对象上的
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu


关于这些方面的更多信息,您可以查看一下

,Python REPL只是返回生成器对象的默认表示形式

生成器无法自行生成其值,必须强制生成。存在许多强制选项,例如将其包装在
列表中

list(find_evens([1,2,3,4,5,6]))
[2, 4, 6]
或者,类似地,通过迭代:

for i in find_evens([1, 2, 3, 4, 5, 6]):
    print(i)
这两个示例(循环,调用
列表
)都将调用生成器对象上的
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu


关于这些方面的更多信息,您可以随时查看

,您可以想象,您只得到一个指向发电机所在位置的指针。通过打印它,您可以打印它所在的位置。但要真正得到这些值,你必须说给我这些值,你可以通过执行
list
或者在
for
循环中使用它来做到这一点。

你可以想象,你只得到一个指向生成器所在位置的指针。通过打印它,您可以打印它所在的位置。但要实际获得值,您必须说给我值,然后您可以通过执行
列表
或在
for
循环中使用它来实现这一点。

生成器对象具有方法
\uuuuuuu next\uu()

必须调用此方法(显式或隐式)以获取其下一个值

(通过在某些上下文中使用generator对象隐式地重复调用它,直到耗尽为止,如
for
循环或
list()
函数中所述。)

创建生成器对象后:

  • 第一次使用
    \uuuuuuuuuuuuuuuuuuuuuuuuuu()
    方法返回第一次
    yield
    语句的值
  • 第二次使用
    \uuuuuuuuuuuuuuuuuuuuuuuuuu()
    方法返回第二次
    yield
    语句的值
  • 依此类推-直到没有额外的
    yield
    语句,在这种情况下,生成器对象被耗尽(并且
    无用
    ),因为它从此时起给出的是异常
    StopIteration
    ,而不是下一个值
比较

>>> even([1, 2, 3, 4, 5, 6]).__next__()
2
>>> even([1, 2, 3, 4, 5, 6]).__next__()
2
>>> even([1, 2, 3, 4, 5, 6]).__next__()
2

gen=偶数([1,2,3,4,5,6]) >>> >>>下一代 2. >>>下一代 4. >>>下一代 6. >>>下一代 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 下一代 停止迭代 >>> >>>下一代 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 下一代 停止迭代
在第一种情况下,一个生成器被一次又一次地创建,而在第二种情况下,它被创建一次,然后重复使用,直到耗尽为止(还有一次-仅用于图示)。

一个生成器对象具有方法
\uuuuuuuuuuuuuuu()

必须调用此方法(显式或隐式)以获取其下一个值

(通过在某些上下文中使用generator对象隐式地重复调用它,直到耗尽为止,如
for
循环或
list()
函数中所述。)

创建生成器对象后:

  • 第一次使用
    \uuuuuuuuuuuuuuuuuuuuuuuuuu()
    方法返回第一次
    yield
    语句的值
  • 第二次使用
    \uuuuuuuuuuuuuuuuuuuuuuuuuu()
    方法返回第二次
    yield
    语句的值
  • 依此类推-直到没有额外的
    yield
    语句,在这种情况下,生成器对象被耗尽(并且
    无用
    ),因为它从此时起给出的是异常
    StopIteration
    ,而不是下一个值
比较

>>> even([1, 2, 3, 4, 5, 6]).__next__()
2
>>> even([1, 2, 3, 4, 5, 6]).__next__()
2
>>> even([1, 2, 3, 4, 5, 6]).__next__()
2

gen=偶数([1,2,3,4,5,6]) >>> >>>下一代 2. >>>下一代 4. >>>下一代 6. >>>下一代 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 下一代 停止迭代 >>> >>>下一代 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 下一代 停止迭代
在第一种情况下,发电机会一次又一次地创建,而在第二种情况下,发电机会创建一次,然后重复使用,直到用完为止(还有一次,仅用于图示)。

请看一看