在Python中使用yield?

Mar*_*sov 0 python yield generator

我有这个代码:

def generator(n):
    list_of = range(1,n+1)
    for i in list_of:
        if i % 7 == 0:
            yield i

print generator(100)
Run Code Online (Sandbox Code Playgroud)

这应该打印给定范围内可被整除的所有数字7,但输出却是<generator object generator at 0x1004ad280>.

此外,yield我的文本编辑器(KOD)中的单词不会像所有保留字一样以天蓝色突出显示,而是以白色显示,是不是很好?

Mar*_*ers 10

你的发电机工作.你忘了迭代它了:

for elem in generator(100):
    print elem
Run Code Online (Sandbox Code Playgroud)

或者你可以把它变成一个列表:

print list(generator(100))
Run Code Online (Sandbox Code Playgroud)

您改为通过调用生成器函数来打印生成的生成器对象.发电机功能产生悬挂的发电机.只有当你迭代它时才会执行代码(直到下一个yield).

演示:

>>> def generator(n):
...     list_of = range(1,n+1)
...     for i in list_of:
...         if i % 7 == 0:
...             yield i
... 
>>> print list(generator(100))
[7, 14, 21, 28, 35, 42, 49, 56, 63, 70, 77, 84, 91, 98]
Run Code Online (Sandbox Code Playgroud)

list()调用迭代给定的参数,生成一个Python列表对象,其中包含由参数产生的所有元素.非常适合迭代生成器以引入它生成的所有元素.

至于KOD; 这位编辑多年来没有见过更新; 你可能想切换到别的东西.正如2年前KOD推特订阅:

不要等我,我有点像僵尸.去获取Sublime Text @sublimehq,这很棒:http://www.sublimetext.com

我同意; Sublime Text是我目前的首选编辑.