zoukankan      html  css  js  c++  java
  • 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() 十进制转二进制
  • 相关阅读:
    [LeetCode 题解]: Remove Duplicates from Sorted List
    [LeetCode 题解]: Merge k Sorted Lists
    [LeetCode 题解]: Insertion Sort List
    [LeetCode 题解]:Candy
    求任意多边形面积 python实现
    C++飞机大战
    version robot
    python一段代码 感受一下
    微机原理上机第四次实验内容
    初步的百度爬虫
  • 原文地址:https://www.cnblogs.com/xuyuwei/p/11366230.html
Copyright © 2011-2022 走看看