从入门到自闭之Python三大器--生成器
1.什么是生成器
- 核心:生成器的本质就是一个迭代器
- 迭代器是python自带的的
- 生成器是程序员自己写的一种迭代器
- 编写方式:
- 基于函数编写
- 推导式编写
def func ():
print("这是一个函数")
return“函数”
func()
def func():
print("这是一个生成器")
yield"生成器"
#func() 生成一个生成器
print(func().__next__) #启动生成器
输出结果:获取到的是一个生成器的
- 内存地址函数体中出现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]
用途:节省空间,例题:吃包子问题
使用场景:
- 当文件或容器中数据量较大时,建议使用生成器
可迭代对象:(python 3 )
- 优点:list,tuple,str 节省时间,取值方便,使用灵活(具有自己的私有办法)
- 缺点:消耗内存
迭代器:
- 优点:节省空间
- 缺点:不能直接查看值,使用不灵活,消耗时间,一次性,不可逆
生成器:
- 优点:节省空间,人为定义
- 缺点:不能直接查看值,消耗时间,一次性,不可逆行
yield 和 return 区别:
- 相同点
- 都是返回内容
- 都可以返回多次,但是return写多个只会执行一个
- 不同点
- return会终止函数,yield是暂停生成器
- yield能够记录当前执行位置
- 相同点
区别:通过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>
yield from将可迭代对象逐个返回
yield 将可迭代对象一次性返回
2. 什么是推导式
- 列表推导式:
- 循环模式:([变量 for循环])
- print([i for i in range(10)])
- 筛选模式:[加工后的变量 for循环 加工条件]
- print ([i for i in range(10) if i > 2])
- print ([i for i in range(10) if i % 2 == 0])
- 循环模式:([变量 for循环])
- 集合推导式:
- 普通循环:{变量 for循环}
- print ({i for i in range(10)})
- 筛选模式:{加工后的变量for循环 加工条件}
- print({i for i in range (10) if i % 2 == 1})
- 普通循环:{变量 for循环}
- 字典推导式:
- 普通:{键:值 for循环}
- print {"key":"value" for i in range (10)}
- 筛选:{加工后的键:值 for循环 加工条件}
- print({i : i+1 for i in range(10) if i % 2 == 0})
- 普通:{键:值 for循环}
- 生成器推导式(面试必问):
- 普通模式:(变量 for 循环)
- tu = (i for i in range(10))这是生成器,切记
- 筛选模式:(加工后的变量 for 循环 加工条件)
- 普通模式:(变量 for 循环)
tu = (i for i in range(10)if i > 5)
for i in tu :
print(i)
3. 内置函数一:
eval:执行字符串类型的代码
exac:执行字符串社类型的代码
eval与exac 禁止使用
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]))help():查看帮助信息
callable():查看对象是否可以调用,
# def func():
# print(1)
# lst = [1,23,4,]
# print(callable(lst)) # 查看对象是否可调用int():将字符串或数字转换成整型
float():转换成浮点数
complex():复数
bin():十进制转二进制
oct():十进制转八进制
hex():十进制转十六进制
divmod():计算除数与被除数结果,包含一个商和余数的元祖
round():保留浮点数的小数位数,可以设定保留位数,默认保留整数
pow():求x ** y次幂(三个参数的时候为x ** y的结果对第三个参数取余)
bytes():用于不同编码之间的转换,建议使用encode
ord():通过元素获取当前表位编码位置
chr():通过表位序号查找对应的元素
repr():查看数据的原生态(给程序员使用的)
all():判断容器汇总的元素是否都为真,返回true
any():判断容器中的元素有一个为真,就是True
从入门到自闭之Python三大器--生成器的更多相关文章
- 从入门到自闭之python三大器--装饰器进阶
装饰器的进阶 有参装饰器: # def warpper(func): # def inner(*args,**kwargs): # user = input("user:") # ...
- 从入门到自闭之Python三大器--迭代器
函数名的第一类对象(概述): 使用方式: 函数名可以当做值赋值给变量 def func(): print(1) print (func) #查看函数的内存地址 a = func print (a) # ...
- 从入门到自闭之python三大器--装饰器
开放封闭原则:在不修改源代码及调用方式,对功能进行额外添加就是开放封闭原则 开放:对代码的扩展进行开发 封闭:修改源代码 装饰(额外功能) 器:工具(函数) 普通版: # print(time.tim ...
- Python 入门之 Python三大器 之 装饰器
Python 入门之 Python三大器 之 装饰器 1.开放封闭原则: (1)代码扩展进行开放 任何一个程序,不可能在设计之初就已经想好了所有的功能并且未来不做任何更新和修改.所以我们必须允许代 ...
- Python 入门之 Python三大器 之 生成器
Python 入门之 Python三大器 之 生成器 1.生成器 (1)什么是生成器? 核心:生成器的本质就是一个迭代器 迭代器是Python自带的 生成器程序员自己写的一种迭代器 def func( ...
- Python 入门之 Python三大器 之 迭代器
Python 入门之 Python三大器 之 迭代器 1.迭代器 (1)可迭代对象: <1> 只要具有__ iter __()方法就是一个可迭代对象 (我们可以通过dir()方法去判断一个 ...
- Python - 三大器 迭代器,生层器,装饰器
目录 Python - 三大器 迭代器,生层器,装饰器 一. 容器 二. 可迭代对象(iterable) 三. 迭代器 四. 生成器 五. 装饰器 1. 定义 六. 闭包 Python - 三大器 迭 ...
- 从入门到自闭之Python自定义模块
自定义模块 定义:一个文件就是一个模块(能被调用的文件,模块就是一个工具箱,工具就是函数) 作用: 将代码文家化管理,提高可读性,避免重复代码 拿来就用(避免重复造轮子),python中类库比较多,提 ...
- 从入门到自闭之Python 基础习题训练
""" name = input(">>>")通过代码来验证name变量是什么数据类型? """ na ...
随机推荐
- python2.7与3.4共存【win】
python3并非完全向后兼容python2 方法一: 电脑里有3.4,再安装个2.7 下载地址:https://www.python.org/downloads/windows/ 解释下安装包: W ...
- TCP窗口扩大选项Window Scale
窗口扩大选项使TCP的窗口定义从16bit增加到32bit.这并不是通过修改TCP首部来实现的,TCP首部仍然使用16bit,而是通过定义一个选项实现对16bit的扩大操作来完成的.于是TCP在内部将 ...
- mysql密码忘记更改
忘记mysql的密码是一件不好的事,通常我们会把密码记住,或者是存在文档中,避免忘记,如果忘记了密码可以参照下方方法来更改,这个操作需要重启mysql. 首先我们在my.cnf文件中的[mysqld] ...
- Winform使用ML.NET时无法加载 DLL“CpuMathNative”问题的解决方法
同样的代码运行在netcore下可以,运行在winform中就出现错误: 引发的异常:“System.DllNotFoundException”(位于 Microsoft.ML.Data.dll 中) ...
- [django]update_or_create使用场景
update_or_create 作用是为了添加数据时防止重复. 先去查询, 如果没有在创建, 如果有则更新. update_or_create用法与密码存储实例 create方法 如果id是None ...
- vim 软件
1. 安装vim 2. 使用vim 操作模式: 1. 一般模式 ,默认进入的一般模式,该模式不能编辑文档 ,只能查看 按 i(insert) ...
- javascript字符串转数字
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- vs在微软官方tfs创建私有项目过程
谁也不是成天创建新项目,每次一创建就跟没干过这活似的,这次把它记下,再用的时候来翻,也希望能给别人点帮助. 上https://dev.azure.com/,tfs原来的网址会往这里跳,现在都在往dev ...
- MySQL 对 IP 字段的排序问题
MySQL 对 IP 字段的排序问题 问题描述 想对一张带有 IP 字段的表,对 IP 字段进行升序排序,方便查看每个段的 IP 信息. 表结构和表数据如下: SET NAMES utf8mb4; ; ...
- spring boot 启动报 java.lang.NoClassDefFoundError: ch/qos/logback/core/spi/LifeCycle 错误
Failed to instantiate SLF4J LoggerFactory Reported exception: java.lang.NoClassDefFoundError: ch/qos ...