1. 程式人生 > >生成器函數

生成器函數

urn yield ext next 代碼 pri for 定義 def

  • 生成器函數定義
    #函數中定義了yield,並不是普通函數,而是生成器函數
    #yield 返回數據,讓函數分段執行
    #return 返回數據,結束本函數調用
    def fun():
     print(‘調用函數1‘)
     yield ‘raa‘
     print(‘調用函數2‘)
     yield ‘roo‘
     print(‘調用函數3‘)
     yield ‘rtt‘
     # print(‘報錯‘)   #最後一個yield後面代碼塊,使用__next__叠代會報錯
    g = fun()   #通過fun()創建生成器
    #第一次叠代(循環)
    print(g.__next__()) #返回raa

    結果:
    F:\myPy\venv\Scripts\python.exe F:/myPy/test.py

    調用函數1
    raa

  • #第一次叠代(循環)
    print(g.__next__()) #返回raa
    #第二次叠代(循環)
    print(g.__next__()) #返回roo

    結果:
    F:\myPy\venv\Scripts\python.exe F:/myPy/test.py
    調用函數1
    raa
    調用函數2
    roo

    #第一次叠代(循環)
    print(g.__next__()) #返回raa
    #第二次叠代(循環)
    print(g.__next__()) #返回roo
    #第三次叠代(循環)
    print(g.__next__()) #返回rtt

    結果:
    F:\myPy\venv\Scripts\python.exe F:/myPy/test.py

    調用函數1
    raa
    調用函數2
    roo
    調用函數3
    rtt

    1. 生成器函數使用循環,(詳情見:for循環本質)
      def fun():
       yield ‘raa‘
       yield ‘roo‘
       yield ‘rtt‘
      g = fun()   #生成器函數與for循環本質是一個叠代器,可以叠代
      for i in g: 
       print(i)

      結果:
      F:\myPy\venv\Scripts\python.exe F:/myPy/test.py
      raa
      roo
      rtt

    生成器函數