python中生成器對象和return 還有循環的區別


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可以用在沒有循環結構中


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM