PythonDay12

day12内置_函数

今日内容

生成器

推导式

内置函数一

生成器

什么是生成器?生成器的本质就是一个迭代器

  • 迭代器是python自带的

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

 

生成器编写方式:

  • 1.基于函数编写

  • 2.推导式方式编写

def func():
print('这是一个函数')
return '函数'
func()

def func():
print("这是一个生成器")
yield '生成器'

# 坑!!!,其实这个生成器只能执行一个next,因为只有一个yield
func() # 生成一个生成器
print(func().__next__()) # 启动生成器
print(func().__next__())
# 上方这句代码的意思是:创建一个生成器并且执行一个next方法,两句一样但互不相干

函数体中出现yield代表要声明一个生成器

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)) # 不能超过yield次数

 

yield和return的区别

相同点:

  • 都是返回内容

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

不同点:

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

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

一个yield对应一个next

生成器的作用

# 生成器的作用是节省空间

# 可迭代对象:
#   优点: list,tuple,str 节省时间,取值方便,使用灵活(具有自己私有方法)
#   缺点: 大量消耗内存

# 迭代器:
#   优点:节省空间
#   缺点:不能直接查看值,使用不灵活,消耗时间,一次性,不可逆行

# 生成器:
#   优点:节省空间,人为定义
#   缺点:不能直接查看值,消耗时间,一次性,不可逆行

# 使用场景:
# 1.当文件或容器中数据量较大时,建议使用生成器

# 数据类型 (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
# yield 将可迭代对象一次性返回
# yield from 将可迭代对象逐个返回

g = func()

for i in g:
print(i)

推导式

列表推导式:

普通循环
print([i for i in range(10)])
print([变量 for循环])

筛选
lst = []
print([i for i in range(10) if i % 2 == 0])
print([i for i in range(10) if i > 2])
[操作后的变量 for循环 判断操作]

集合推导式:

普通循环
print({i for i in range(10)})
{变量 for循环}
筛选
print({i for i in range(10) if i % 2 == 1})
{操作后的变量 for循环 操作}

字典推导式:

普通循环
print({i: i+1 for i in range(10)})
{键:值 for循环}
筛选模式
print({i:i+1 for i in range(10) if i % 2 == 0})
{操作的键:值 for循环 操作}

生成器推导式:

普通模式
tu = (i for i in range(10))
(变量 for循环)
筛选模式
tu = (i for i in range(10) if i > 5)
(操作后的变量 for循环 操作)

内置函数一

all()  判断容器中的元素是否都为真
any() 判断容器中的元素是否有一个为真
bytes() 将字符串进行编码
callable() 查看对象是否可 调用 == ()
chr() 通过表位序号查找元素
complex() 复数
eval() 神器一
exec() 神器二 神器禁止使用
frozenset() 冻结集合
globals() 查看全局空间变量
hash() 区分可变数据类型和不可变数据类型
help() 查看帮助信息
id() 查看内存地址
locals() 查看当前空间变量
oct() 十进制转八进制
ord() 通过元素获取当前unicode表位的序号
pow() 幂,两个参数是求幂,三个参数时求幂后在取余
repr() 查看数据的原生态
round() 保留小数位
divmod() 求商和余
bin() 十进制转二进制
    原文作者:徐佳成
    原文地址: https://www.cnblogs.com/xuyuwei/p/11366230.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞