1.什么是生成器

  1. 核心:生成器的本质就是一个迭代器

    1. 迭代器是python自带的的
    2. 生成器是程序员自己写的一种迭代器
  2. 编写方式:
    1. 基于函数编写
    2. 推导式编写
def func ():
print("这是一个函数")
return“函数”
func()
def func():
print("这是一个生成器")
yield"生成器"
#func() 生成一个生成器
print(func().__next__) #启动生成器
输出结果:获取到的是一个生成器的

  1. 内存地址函数体中出现yield代表要声明一个生成器,generator -- 生成器

    获取到的是一个生成器的内存地址
# 获取到的是一个生成器的内存地址
# <generator object func at 0x00000087C2A10CA8>
# 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)) # 执行结果:
# 请输入内容>>>>你好
# 你好
# 这是第二次启动
# 生成器2
# 生成器3
# 生成器4

一个yield 必须对应一个next

# def func():
# lst =[]
# for i in range(100000):
# lst.append(i)
# return lst
# print(func())
# 输出结果:[0~100000]
  1. 用途:节省空间,例题:吃包子问题

  2. 使用场景:

    1. 当文件或容器中数据量较大时,建议使用生成器
  3. 可迭代对象:(python 3 )

    • 优点:list,tuple,str 节省时间,取值方便,使用灵活(具有自己的私有办法)
    • 缺点:消耗内存
  4. 迭代器:

    • 优点:节省空间
    • 缺点:不能直接查看值,使用不灵活,消耗时间,一次性,不可逆
  5. 生成器:

    • 优点:节省空间,人为定义
    • 缺点:不能直接查看值,消耗时间,一次性,不可逆行
  6. yield 和 return 区别:

    1. 相同点

      • 都是返回内容
      • 都可以返回多次,但是return写多个只会执行一个
    2. 不同点
      • return会终止函数,yield是暂停生成器
      • yield能够记录当前执行位置
  7. 区别:通过send区别什么是迭代器,什么是生成器

    • 迭代器的地址<list_iterator>

    • 生成器的地址

      # 数据类型 (pyhton3: range() | python2 :xrange()) 都是可迭代对象 __iter__()
      # 文件句柄是迭代器 __iter__() __next__()

没有send方法就是一个迭代器,具有send方法就是一个生成器

# def func():
# lst = [1,2,3,45,6]
# lst1 = ["alex","wusir","taibi","baoyuan"]
# yield from lst
# yield from lst1
# g = func()
# print(g)
# 输出结果:<generator object func at 0x0000010DA038CF68>

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

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

2. 什么是推导式

  1. 列表推导式:

    1. 循环模式:([变量 for循环])

      • print([i for i in range(10)])
    2. 筛选模式:[加工后的变量 for循环 加工条件]
      • print ([i for i in range(10) if i > 2])
      • print ([i for i in range(10) if i % 2 == 0])
  2. 集合推导式:
    1. 普通循环:{变量 for循环}

      • print ({i for i in range(10)})
    2. 筛选模式:{加工后的变量for循环 加工条件}
      • print({i for i in range (10) if i % 2 == 1})
  3. 字典推导式:
    1. 普通:{键:值 for循环}

      • print {"key":"value" for i in range (10)}
    2. 筛选:{加工后的键:值 for循环 加工条件}
      • print({i : i+1 for i in range(10) if i % 2 == 0})
  4. 生成器推导式(面试必问):
    1. 普通模式:(变量 for 循环)

      • tu = (i for i in range(10))这是生成器,切记
    2. 筛选模式:(加工后的变量 for 循环 加工条件)
tu = (i for i in range(10)if  i > 5)
for i in tu :
print(i)

3. 内置函数一:

  1. eval:执行字符串类型的代码

  2. exac:执行字符串社类型的代码

    eval与exac 禁止使用

  3. hash()作用就是区分可变数据类型与不可变数据类型

    # print(hash("123"))
    # print(hash(12))
    # print(hash(-1))
    # print(hash(-10))
    # print(hash((2,1))) # dic = {[1,2,3]:2}
    # print(hash([1,2,3]))
  4. help():查看帮助信息

  5. callable():查看对象是否可以调用,

    # def func():
    # print(1)
    # lst = [1,23,4,]
    # print(callable(lst)) # 查看对象是否可调用
  6. int():将字符串或数字转换成整型

  7. float():转换成浮点数

  8. complex():复数

  9. bin():十进制转二进制

  10. oct():十进制转八进制

  11. hex():十进制转十六进制

  12. divmod():计算除数与被除数结果,包含一个商和余数的元祖

  13. round():保留浮点数的小数位数,可以设定保留位数,默认保留整数

  14. pow():求x ** y次幂(三个参数的时候为x ** y的结果对第三个参数取余)

  15. bytes():用于不同编码之间的转换,建议使用encode

  16. ord():通过元素获取当前表位编码位置

  17. chr():通过表位序号查找对应的元素

  18. repr():查看数据的原生态(给程序员使用的)

  19. all():判断容器汇总的元素是否都为真,返回true

  20. any():判断容器中的元素有一个为真,就是True

从入门到自闭之Python三大器--生成器的更多相关文章

  1. 从入门到自闭之python三大器--装饰器进阶

    装饰器的进阶 有参装饰器: # def warpper(func): # def inner(*args,**kwargs): # user = input("user:") # ...

  2. 从入门到自闭之Python三大器--迭代器

    函数名的第一类对象(概述): 使用方式: 函数名可以当做值赋值给变量 def func(): print(1) print (func) #查看函数的内存地址 a = func print (a) # ...

  3. 从入门到自闭之python三大器--装饰器

    开放封闭原则:在不修改源代码及调用方式,对功能进行额外添加就是开放封闭原则 开放:对代码的扩展进行开发 封闭:修改源代码 装饰(额外功能) 器:工具(函数) 普通版: # print(time.tim ...

  4. Python 入门之 Python三大器 之 装饰器

    Python 入门之 Python三大器 之 装饰器 1.开放封闭原则: (1)代码扩展进行开放 ​ 任何一个程序,不可能在设计之初就已经想好了所有的功能并且未来不做任何更新和修改.所以我们必须允许代 ...

  5. Python 入门之 Python三大器 之 生成器

    Python 入门之 Python三大器 之 生成器 1.生成器 (1)什么是生成器? 核心:生成器的本质就是一个迭代器 迭代器是Python自带的 生成器程序员自己写的一种迭代器 def func( ...

  6. Python 入门之 Python三大器 之 迭代器

    Python 入门之 Python三大器 之 迭代器 1.迭代器 (1)可迭代对象: <1> 只要具有__ iter __()方法就是一个可迭代对象 (我们可以通过dir()方法去判断一个 ...

  7. Python - 三大器 迭代器,生层器,装饰器

    目录 Python - 三大器 迭代器,生层器,装饰器 一. 容器 二. 可迭代对象(iterable) 三. 迭代器 四. 生成器 五. 装饰器 1. 定义 六. 闭包 Python - 三大器 迭 ...

  8. 从入门到自闭之Python自定义模块

    自定义模块 定义:一个文件就是一个模块(能被调用的文件,模块就是一个工具箱,工具就是函数) 作用: 将代码文家化管理,提高可读性,避免重复代码 拿来就用(避免重复造轮子),python中类库比较多,提 ...

  9. 从入门到自闭之Python 基础习题训练

    """ name = input(">>>")通过代码来验证name变量是什么数据类型? """ na ...

随机推荐

  1. Python3中tornado高并发框架

    1.单线程tornado.web:基础web框架模块tornado.ioloop:核心IO循环模块,高效的基础.封装了:1.asyncio 协程,异步处理2. epoll模型:水平触发(状态改变就询问 ...

  2. css基础(浮动 清除f浮动)

    文档流(标准流) 1.元素自上而下,自左而右  2.块元素,独占一行,行内元素在一行上显示,碰到父级元素的边框换行   浮动left 浮动的框可以向左或是向右移动,直到它的边缘碰到包含框或是另个浮动框 ...

  3. LVS集群之NAT模式

    集群的分类: (1)HA:高可用集群,有叫双机热备 原理:两台机器A.B,正常是A提供服务,当A机宕机或者服务有问题时,会切换到B机继续提供服务常用的高了永软件:heartbeat和keepalive ...

  4. linux rpm包管理 yum管理

    1. 软件包的管理 RPM的定义:RPM就是Red Hat Package Manger(红帽软件包管理工具)的缩写. RPM包不需要编译,本身就是二进制,而源码包需要先编译成系统识别的二进制文件,才 ...

  5. LeetCode 260. 只出现一次的数字 III(Single Number III)

    题目描述 给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次. 找出只出现一次的那两个元素. 示例 : 输入: [1,2,1,3,2,5] 输出: [3,5] 注意: 结 ...

  6. mysql数据库基本操作sql语言

    mysql的启动与关闭 启动 /etc/init.d/mysql start 多实例使用自建脚本启动 2种关闭数据库方法 mysqladmin -uroot -p密码 shutdown #优雅关闭/e ...

  7. 标准C++常用头文件及描述

    #include <algorithm> //STL 通用算法 #include <bitset> //STL 位集容器 #include <cctype> //字 ...

  8. ORA-39095: Dump file space has been exhausted

    ORA-39095: Dump file space has been exhausted Table of Contents 1. 简述 2. 错误信息 3. 分析 4. 解决 5. 扩展 1 简述 ...

  9. CL_GUI_FRONTEND_SERVICES 使用问题

    CL_GUI_FRONTEND_SERVICES(SAP操作Windows文件) 这个类下面的方法均为静态方法,引用的时候以=>来引用方法 注意:在执行CL_GUI_FRONTEND_SERVI ...

  10. Xshell 6 安装注册说明

    1.下载 官方下载到的版本在进行安装的时候,是有序列号输入框的如下图,但是好像我们从那个所谓的官网上下载的却没有,只能下载到一点击注册就跳转到一个网站的那种版本. 像上面这种版本如何下载呢? 我们去官 ...