码迷,mamicode.com
首页 > 其他好文 > 详细

迭代器和生成器

时间:2016-02-07 13:31:30      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:

   定义一个函数,函数中用 yield 暂停函数,则这个函数就是一个生成器。生成器返回一个迭代器。

   yield 和 return 的区别:

   1. 执行函数时, 到了return ,函数就结束了。 执行到了yield ,暂停, 如果yield 后面还有 语句, 下次调用 __next__() 方法可以继续上次的调用执行。

   2. 执行的方法:函数定义后,函数名后就括号即会执行函数。 但是 如果是一个生成器,函数名后加括号不会执行该函数,需要用生成器的 __next__() 方法来执行。

       即 函数名().__netx__()  

   3. return 返回了函数的值,yield 并没有返回函数值,只是暂停函数。

 

#--encoding : utf-8 --
def cash_out(amount):
    while amount > 0:
        amount -= 100
        print("before:"+ str(amount))
        #return amount
        yield "函数暂停"
        print("after:"+ str(amount))
        print("又来取钱了")

atm = cash_out(500)
print(atm)
print(atm.__next__())

print(" leave to do something ……")
print(" 二十年以后……")

print(atm.__next__())

  输出结果:

D:\Python34\python.exe E:/PycharmProjects/Day3/opentest.py
<generator object cash_out at 0x02F35C10>
before:400
函数暂停
leave to do something ……
二十年以后……
after:400
又来取钱了
before:300
函数暂停

 

 

注: 可以看出,在第一次调用 __next__() 方法后,函数暂停了, 在打印了 “二十年以后……”  , 再次调用 __next__() 方法, 函数接着上次 yield 暂停处继续执行 。yield 相当于函数的一个断点。

迭代器和生成器

标签:

原文地址:http://www.cnblogs.com/z360519549/p/5184608.html

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