码迷,mamicode.com
首页 > 编程语言 > 详细

python 之yield个人理解

时间:2016-07-29 19:40:46      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:python

!/usr/bin/python3
#-*- coding:utf-8 -*-
def a(max):
    n = 0
    while n < max:
        c = [‘aa‘,‘bb‘,‘cc‘,‘dd‘,‘rr‘,‘ff‘]
        print  ‘yield 前面‘,n
        yield c[n]
        print ‘yield 后面‘,n
        n+=1
for i in a(6):
    print "for循环print:" ,i
    print ‘--‘ *25

执行过程:

通过结果可以看出:首先for循环调用函数,执行函数执行到截止yield的部分代码:

def a(max):
    n = 0
    while n < max:
        c = [‘aa‘,‘bb‘,‘cc‘,‘dd‘,‘rr‘,‘ff‘]
        print ‘yield 前面‘,n   #n为0
        yield c[n]   #这时n为0

执行到yield返回c[n]这个列表的值,然后继续运行for循环:

for i in a(6):
    print "for循环print:" ,i
    print ‘--‘ * 25

执行完for循环,继续调用函数,这时并不是重新执行函数,而是从刚才yield的截断点开始执行,返回print n的值还没有n+1 所以返回为0!!!

然后继续执行函数,会打印n+1的值,遇到yield继续截断,开始执行for循环---如此反复。

结果:

yield 前面 0
for循环print: aa
--------------------------------------------------
yield 后面 0
yield 前面 1
for循环print: bb
--------------------------------------------------
yield 后面 1
yield 前面 2
for循环print: cc
--------------------------------------------------
yield 后面 2
yield 前面 3
for循环print: dd
--------------------------------------------------
yield 后面 3
yield 前面 4
for循环print: rr
--------------------------------------------------
yield 后面 4
yield 前面 5
for循环print: ff
--------------------------------------------------
yield 后面 5


本文出自 “鬼迷心窍” 博客,请务必保留此出处http://dragondragon.blog.51cto.com/6170889/1831616

python 之yield个人理解

标签:python

原文地址:http://dragondragon.blog.51cto.com/6170889/1831616

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!