首页 > 技术文章 > yield 跟return 区别

epirus 2013-09-17 23:44 原文

这个还是有点意思,两个都是有返回的意思,但是区别在哪里呢?

 

1.return 会销毁函数的局部变量,下次调用的时候又会产生新的值

 

2.yield 当退出函数的时候,变量人然存在,函数下次调用的时候变量仍然存在。

 

很好玩吧,那我就很好奇了,这个yield是generater的简便方法 ,所以generater有什么神奇的地方呢?

# Using the generator pattern (an iterable)
class firstn(object):
    def __init__(self, n):
        self.n = n
        self.num, self.nums = 0, []

    def __iter__(self):
        return self

    def next(self):
        if self.num < self.n:
            cur, self.num = self.num, self.num+1
            return cur
        else:
            raise StopIteration()

test=firstn()
print test.next()
print test.next()
虽然这个也没有解释出什么,但是能更清晰感觉到这种关系。
如果真想知道generater的内部结构,也许真的该去读python源码,可惜水平不够呀。先到这里吧



推荐阅读