第十二节

一,生成器

  • 生成器的核心:生成器的本质就是迭代器

    • 迭代器是python自带的

    • 生成器是程序员自己写的一种迭代器

  1. 在python中有三种方式来创建生成器:

    • 基于函数编写

    • 推导式方式编写

    • python内置函数或者模块提供(其实1,3两种本质上差不多,都是通过函数的形式生成,只不过1是自己写的生成器函数,3是python提供的生成器函数而已)

    # def func():#     print("这是一个函数")#     return "函数"# func()​def func():    print("这是一个生成器")    yield "生成器"# 坑func() # 生成一个生成器print(func().__next__())  # 启动生成器print(func().__next__())
  2. yield与return:

    • 相同点:

      • 都是返回内容

      • 都可以返回多次(但是return写多个只会执行一个)

    • 不同点:

      • return是终止函数,yield是暂停生成器

      • yield能够记录当前执行位置

  3. 一个yield对应一个next

    def func():    msg = input("请输入内容")    yield msg    print("这是第二次启动")    yield "生成器2"    yield "生成器3"    yield "生成器4"​g = func()print(next(g))print(next(g))print(next(g))print(next(g))
  4. 可迭代对象,迭代器,生成器的区别:

    • 可迭代对象:

      • 优点:list,tuple,str 节省时间,取值方便,使用灵活(具有自己的方法)

      • 缺点:大量消耗内存

    • 迭代器:

      • 优点:节省空间

      • 缺点:不能直接查看值,使用不灵活,消耗时间,一次性,不可逆行

    • 生成器:

      • 优点:节省空间,人为定义

      • 缺点:不能直接查看值,消耗时间,一次性,不可逆行

    # 数据类型 #(pyhton3: range() | python2 :xrange()) 都是可迭代对象 __iter__()# 文件句柄是迭代器  __iter__() __next__()# 没有send方法就是一个迭代器,具有send方法的就是一个生成器
  5. 使用场景

    • 当文件或容器中数据量较大时,建议使用生成器。

  6. 区别什么是迭代器,什么是生成器

    • 迭代器的地址 :iterator

    • 生成器的地址 :generator

    • yield 将可迭代对象一次性返回

    • yield from 将可迭代对象逐个返回

    def func():    lst = [1,2,3,45,6]    lst1 = ["alex","wusir","taibi","baoyuan"]    yield from lst    yield from lst1​g = func()

二,推导式

    • 普通循环

      print([i for i in range(10)]) # list# print([变量 for循环])print({i for i in range(10)}) # set# print({变量 for循环})print({i: i+1 for i in range(10)}) # dict# print({键:值 for循环})
    • 筛选模式

      print([i for i in range(10) if i > 2]) # list# print([加工后的变量 for循环 加工条件])print({i for i in range(10) if i % 2 == 1}) # set# print({加工后的变量 for循环 加工条件})print({i: i+1 for i in range(10) if i % 2 == 0}) # dict# print({加工后的键:值 for循环 加工条件})
  1. 没有元组推导式。

  2. 生成器推导式

    • 普通模式

    tu = (i for i in range(10)) print((变量 for循环))
    • 筛选模式

    tu = (i for i in range(10) if i > 5)print((加工后的变量 for循环 加工条件))

三,内置函数Ⅰ

  1. 了解即可

    • type():运算字符串中的算数

    • eval():运行字符串中的代码

    • hash():区分可变和不可变数据类型

    • help():查看帮助信息

    • callable():查看对象是否可调用

    • float():查看浮点数

    • complex():复数

      • bin():十进制转二进制

      • oct():十进制转八进制

      • hex():十进制转十六进制

    • divmod(除数,被除数):(商,余)

    • round(小数,保留位数):保留小数位

      • pow():两个参数求幂

      • pow(2,2,3):两个参数求幂后的余

    • bytes(str,encoding="utf-8"):将字符串进行编码

    • ord():通过元素获取当前表位的序号

    • chr():通过表位序号查找元素

    • repr():查看数据的原生态

    • all():判断容器中的元素是否都为真

    • any():判断容器中的元素是否有一个为真

    • locals():查看当前空间变量

    • globals():查看全局空间变量

    • format():

python_0基础开始_day12的更多相关文章

  1. python_0基础学习_day02

    第二节 一,while while也称为无限循环.死循环 while 条件: 缩进 循环体 应用领域:音乐播放:单曲循环,列表循环,随机播放(也是有规律的) 登陆界面:…… 数学计算:1~100的和, ...

  2. python_0基础学习_day01

    Python是一门动态解释型的强类型定义语言 一.变量 变量命名规则 由数字.字母.下划线组成 不能以数字开头 要具有描述性 要区分大小写 禁止使用python的关键字(在pycharm中关键字明明变 ...

  3. python_0基础开始_day07

    第七节 1,基础数据类型补充 str: print(str.capitalize()) —— 首字母大写 print(str.title()) —— 每个单词的首字母大写 print(str.swap ...

  4. python_0基础开始_day06

    第六节 1.小数据池 ==,is,id ==:查看等号两边的值是否一样 a = 9b = 9print(a == b) # 返回Truec = "dog"d = "dog ...

  5. python_0基础开始_day03

    第三节 一.整形和布尔值的转换 int整型 python3: 全部都是整型 python2: 整型,长整型long 十进制转换二进制 # 将十进制的168转换为二进制 ​#得出结果 将十进制的168转 ...

  6. python_0基础开始_day05

    第五节 一.字典 python的数据结构之一 字典 —— dict 定义:dic = {"key":"dajjlad"} 作用:存储数据,大量,将数据和数据起到 ...

  7. python_0基础开始_day04

    第四节 一.列表 list 数据类型之一,存储大量的,不同类型的数据 列表中只要用逗号隔开的就是一个元素 有序可变的. 1.1列表的索引 列表和字符串一样也拥有索引,但是列表可以修改: lst = [ ...

  8. python_0基础开始_day13

    第十三节 一,匿名函数 匿名函数 == 一行函数 lambda == def == 关键字 函数体中存放的是代码 生成器体中存放的也是代码 就是yield导致函数和生成器的结果不统一 lambda x ...

  9. python_0基础开始_day11

    第十一节 一,函数名的第一类对象 函数名当作值,赋值给变量 print(函数名) 查看看书的内存地址 函数名可以当作容器中的元素 lis = []dic = {}def func():    prin ...

随机推荐

  1. Linux添加磁盘和挂载

    1.新建一个虚拟磁盘,例:20GB 2.重启后使用 fdisk -l 查看磁盘详细信息,刚添加的磁盘信息如下: 3.对刚添加的磁盘进行分区 fdisk /dev/sdc 4.格式化分区 mkfs.ex ...

  2. vue+ts搭建项目

    Tip: 为了避免浪费您的时间,本文符合满足以下条件的同学借鉴参考 1.本文模版不适用于小型项目,两三个页面的也没必要用vue2.对typescript.vue全家桶能够掌握和运用 此次项目模版主要涉 ...

  3. HDU 5818 Joint Stacks ——(栈的操作模拟,优先队列)

    题意:有两个栈A和B,有3种操作:push,pop,merge.前两种都是栈的操作,最后一种表示的是如果“merge A B”,那么把B中的元素全部放到A中,且满足先入后出的栈原则. 分析:显然,我们 ...

  4. Nexus3.x帐号权限配置

    一.使用admin登录后,点击上方齿轮图标 二.打开左侧导航,Security Privileges:具体的权限明细,比如我创建一个test仓库,这里就会生成 Roles:添加角色,设置每个角色可看到 ...

  5. koa 基础(七)错误处理中间件

    1.错误处理中间件 app.js /** * 错误处理中间件 */ // 引入模块 const Koa = require('koa'); const router = require('koa-ro ...

  6. Spring Boot Cli下载安装

    本地下载地址: spring-boot-cli-2.1.8.RELEASE-bin.zip  : https://pan.baidu.com/s/1GMyxj1PecsM4BG_hzoteVQ spr ...

  7. MIL/SIL/PIL/HIL/VIL

    MIL:Model in the loop 模型在环,对模型在模型的开发环境下(如SIMULINK)进行仿真,通过输入一系列的测试用例,验证模型是否满足设计的功能需求.验证控制算法模型是否准确地实现了 ...

  8. LC 302. Smallest Rectangle Enclosing Black Pixels【lock, hard】

    An image is represented by a binary matrix with 0 as a white pixel and 1 as a black pixel. The black ...

  9. Struts2中国际化

    1.  写资源文件 Msg.properties   默认的语言环境: 找不到配置就找它 Msg_en_US.properties  美国 2.  加载 <constant name=" ...

  10. javascript字符串转数字

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...