对yield的理解

#!/usr/bin/python3

def fib(max):
    n, a, b = 0, 0, 1
    while n < max:
        print(b)
        yield 123456
        a, b = b, a + b
        n = n + 1
    return 'done'

o = fib(10)

print(next(o));

yield真的是一个很神奇的东西啊

有yield的函数就像类一样

必须有 exampel = function_name()

然后调用next(example)或者example.__next__()来让程序运行到第一个yield处并返回yield后面的值

接着不停的调用这个函数让他运行到第二个yield......

就跟断点一样

 

在整个函数执行完之后会报错,错误的返回值就是函数最后的返回值

所以如果想不报错,正确的方法是用for

#!/usr/bin/python3

def fib(max):
    n, a, b = 0, 0, 1
    while n < max:
        print(b)
        yield 123456
        a, b = b, a + b
        n = n + 1
    return 'done'

for f in fib(10):
    print(f)

输出是

1
123456
1
123456
2
123456
3
123456
5
123456
8
123456
13
123456
21
123456
34
123456
55
123456

 

posted @ 2017-11-23 10:12  shensobaolibin  阅读(134)  评论(0编辑  收藏  举报