python高级02--生成器

1、生成器
1.列表推导式
         列表推导式的写法:
          [i for i in range(1, 101)]
          [i for i in range(1, 101) if i % 2== 0]
          [i*j for i in range(1, 10) for j in range(1, 10)]

       注意:列表推导式很强大,
       但是如果生成一个自然数的列表,列表中的元素就会无穷无尽,
       内存的占有就特别的夸张,在实际使用中就会溢出,这样就会使程序崩溃,
       所以只有在一部分的情况下才能使用。
在这里插入图片描述

2.列表生成器
              我们的列表推导式是一次直接生成所有数据,会占用大量的内存,所以如果我们只是取其中的某一些特殊值,并且取值的数量很小,例如只是按照某一规律生成一个数列,但只要这个数列的第5个数时,我们就没有必要生成整个数列,而且也生成不完不现实,所以基于这种情况,所以在python 中推出了列表生成器。这里不用存所用的数据,而是存产生这些数据的一个方法,这样我们需要数据是再一个一个生成就可以了。

1、将列表推导式转换为列表生成器,在需要数据的时候,只生成需要的数据,大大的减小了对内存的需求。
方法:将列表中[]使用()来代替

获取其中的值:使用全局函数next,并且返回下一个值
取特定的值时,可以通过循环得到

在这里插入图片描述

yield关键字的使用:
yield关键字在函数中出现,和return类似,用来返回结果
但是我yield返回的结果是一个生成器,只有当我们使用next函数
调用这个生成器才能产生结果
yield的运行过程

  1. def test_yield(num):

  2. print("---------------0------------")

  3. count = 1

  4. while count < num:

  5. print(’-------------1-----------’)

  6. yield “zhang” + str(count)

  7. count += 1

  8. print(’-------------2-----------’)

  9. a = test_yield(20)

  10. next(a)

  11. next(a)

  12. next(a)

在这一段代码中当我们进入函数后首先会输出0然后进入循环输出1,然后执行yield退出函数,当执行第二个naxt时,代码会直接跳到yield后面的代码输出 2,再判断循环条件,进入循环输出1,又到yield跳出函数,以此往复执行。

2.可迭代对象和迭代器
Python中的可迭代对象

  1. str 字符串
  2. list 列表
  3. set 集合
  4. tuple 元组
  5. dict 字典
  6. generator 生成器

迭代器定义:
能够被next调用,并且返回下一个值的叫做迭代器
可迭代对象不一定是迭代器,迭代器是可迭代对象,可以通过iter来将将可迭代对象转换为跌代器
模块:collections 中有 Iterable Iterator 模块
Iterable 可迭代对象
Iterator 迭代器
isinstance(ls, Iterable) 判断对象ls是否为Iterable类型

3.函数高级
1、偏函数
函数在调用的时候,要带上所有必要的参数才能进行。但是,有时有些参数在每次调用函数时都是不变的。这种情况下,一个函数有一个或多个参数预先就能定好,这样函数就能用更少的参数进行调用,方便我们的操作。

from functools import partial
int_hex = partial(int, base=16)
在默认的情况下int转换类型是以十进制转换的,因为int有一个base的参数,如上代码就将int转换后的整型改为以十六进制转换为十进制。
在这里插入图片描述

2、闭包(closure)
弱数据类型编程语言所特有的现象
是一种函数嵌套函数的情况,能够读取其他函数内部变量的函数叫做闭包

优点:1、局部变量全局化;
2、防止全局变量的污染
缺点:占据内存,无法回收,内存无法释放。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值