python中生成器對象和return 還有循環的區別
在python中存在這么一個關鍵字yield,這個關鍵字在項目中經常被用到,比如我寫一個函數不想它只返回一次就結束那我們就不能用return,因為return后面就不能跟任何東西,意味着函數的結束。那么我們完全可以這么做:
def main():
for i in range(1,100):
yield i
這樣就等於生成了一個循環返回對象,特別在爬蟲scrapy中較為常見!yeild和return還有for 上本質有什么區別呢?其實很簡單,return 后面跟着返回值在python中的函數如果沒有return 其實函數等同於return None 返回一個空對象,不管返回什么都將意味着函數的結束,請注意是函數是所在的函數結束而不是虛擬機內存的結束,而yield的用法是返回了一個生成器對象
def gen_generator(): yield 1 def gen_value(): return 1 if __name__ == '__main__': ret = gen_generator() print ret, type(ret) #<generator object gen_generator at 0x02645648> <type 'generator'> ret = gen_value() print ret, type(ret) # 1 <type 'int'>
本質上是不同的,生成器對象有自身的屬性和方法,而for 循環僅僅是作為一個迭代對象,從某種意義來說其實yield和for 都可以用來做迭代使用不同的是yeild可以用在沒有循環結構中