Python10:高级特性

在这里插入图片描述

1. 生成式详解

  • 列表生成式就是一个用来生成列表的特定语法形式的表达式。是Python提供的一种生成列表的简洁形式, 可快速生成一个新的list。
	普通的语法格式:[exp for iter_var in iterable]
	带过滤功能语法格式: [exp for iter_var in iterable if_exp]
	循环嵌套语法格式: [exp for iter_var_A in iterable_A for iter_var_B in iterable_B]
  • 字典生成式:用来快速生成字典;
    集合生成式:用来快速生成集合;

1.1 列表生成式

列表生成式:
1.需求:生成100个验证码(4个字母组成的验证码)

1.1 普通:
import string,random
codes = []
for count in range(100):
    code = "".join(random.sample(string.ascii_letters,4))
    codes.append(code)
print(codes)

1.2列表生成式:
codes = ["".join(random.sample(string.ascii_letters,4)) for i in range(100)]
print(codes)

在这里插入图片描述

列表生成式:
2.需求:找出1-100之间可以被3整除的数

2.1普通:
nums = []
for num in range(101):
    if num%3 == 0:
        nums.append(num)
print(nums)

2.2列表生成式:
nums = [num for num in range(101) if num%3==0]
print(nums)

在这里插入图片描述

1.2 字典与集合生成式

练1:

s = {
   1,2,3,4,5,6,7}

集合生成式
print({
   i**2 for i in s})
#{1, 4, 36, 9, 16, 49, 25}

字典生成式
print({
   i:i**2 for i in s})
#{1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49}

练2:

集合生成式
s = {
   1,2,3,4}
print(sorted({
   i**2 for i in s}))
#[1, 4, 9, 16]

字典生成式
result = {
   i:i**2 for i in range(10)}
print(result)
#{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}

2. 生成器与yield详解

  • 什么叫生成器?
    在Python中,一边循环一边计算的机制,称为生成器:Generator。

  • 什么时候需要使用生成器
    性能限制需要用到,比如读取一个10G的文件,如果一次性将10G的文件加载到内存处理的话(read方法),内存肯定会溢出;但使用生成器把读写交叉处理进行,比如使用(readline和readlines)就可以再循环读取的同时不断处理,这样就可以节省大量的内存空间。

  • 如何创建生成器?
    第一种方法: 列表生成式的改写。 []改成()
    第二种方法: yield关键字。

  • 如何打印生成器的每一个元素呢?
    通过for循环, 依次计算并生成每一个元素。
    如果要一个一个打印出来,可以通过next()函数获得生成器的下一个返回值。

  • 生成器的特点是什么?
    解耦。爬虫与数据存储解耦;
    减少内存占用。随时生产, 即时消费, 不用堆积在内存当中;
    可不终止调用。写上循环, 即可循环接收数据, 对在循环之前定义的变量, 可重复使用;
    生成器的循环, 在 yield 处中断, 没那么占 cpu。

1.生成式的缺点:
  需要等待长时间
  会将值返回
  
num = [i**2 for i in range(1000)]
print
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值