Chinaunix首页 | 论坛 | 博客
  • 博客访问: 86548
  • 博文数量: 26
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 250
  • 用 户 组: 普通用户
  • 注册时间: 2015-08-12 22:31
文章分类

全部博文(26)

文章存档

2016年(26)

我的朋友

分类: Python/Ruby

2016-12-13 09:42:09

一,生成器

生成器的本质(必须有yield)

  1. def func():
  2.         print("111")
  3.         yield 1
  4.         print("222")
  5.         yield 2
  6.         print("333")
  7.         yield 3

  8.     res = func() #返回一个对象,生成器
  9.     r1 = res.__next__() #进入函数找到yield,获取yield后面的值
  10.     print(r1)
  11.     r2 = res.__next__() #进入函数找到yield,获取yield后面的值
  12.     print(r2)
  13.     r3 = res.__next__() #进入函数找到yield,获取yield后面的值
  14.     print(r3)
  15.     # r4 = res.__next__() #进入函数找到yield,获取yield后面的值。此时没有则会报错。
  16.     # print(r4)

  17.     #保存上一次执行的位置,下次接着上一次的位置去继续执行


  18.     结果:

  19.     111
  20.     1
  21.     222
  22.     2
  23.     333
  24.     3
  25.     
  26.     
  27.     
  28.     2,自定义的生成器(具有生成能力的对象)
  29.     
  30.     def my_range(args):
  31.     start = 1
  32.     while True:
  33.         if start > args:
  34.             return
  35.         yield start
  36.         start += 1



二,迭代器


迭代器不需要我们去写,只要会用,只需要调用for循环即可。迭代器是对__next__方法的封装,
__next__方法在取完值的时候,如果继续取值则会报错。而for循环,则是对其的封装,
不会报错!




三,函数递归(本质一个函数调用另外一个函数)


递归

  1. def func(n):
  2.     n += 1
  3.     if n > 10:
  4.         return "end"
  5.     return func(n)
  6.     
  7. 结果:

  8. end










阅读(1627) | 评论(0) | 转发(0) |
0

上一篇:字符串格式化

下一篇:模块

给主人留下些什么吧!~~