zoukankan      html  css  js  c++  java
  • 生成器 推导式 内置函数(一)

    1.生成器

    迭代器和生成器的区别:

    迭代器是Python中内置的一种节省空间的工具

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

    迭代器是Python自带的

    生成器是咱们(程序员)写得

    定义一个生成器:

    基于函数,
    函数体中存在yield就是一个生成器
    函数名() 就是产生一个生成器
    def func():
        print(123)
        return "你好"
    func()
    
    def func():
        if 3>2:
            yield "你好"   #停
        if 4>2:
            yield "我好"
        yield "大家好"
    g = func() # 产生一个生成器
    print(g.__next__())
    print(g.__next__())
    print(g.__next__())
    for i in g:
        print(i)
    

    for 循环的本质

    while True:              
        try:
            print(g.__next__())
            except StopIterration:
                break
    

    生成器的优点和注意事项

    节省空间 -- 惰性机制

    不能逆行

    一次性

    一个next对应一个yield

    yield 能够进行返回内容,还能够返回多次

    yield能够临时停止循环

    yield 能够记录执行的位置

    输出方式

    def foo():
        for i in range(10):
            pass
            yield i
        count = 1
        while True:
            yield count
            count += 1
    g = foo()
    print(next(g))  # ---- 推荐使用
    print(next(g))
    print(next(g))
    print(next(g))
    print(next(g))
    
    ### 坑
    如果不用变量接受,直接输出
    print(foo().__next__())
    print(foo().__next__())
    一直循环输出#9
    

    生成器应用场景

    def func():
        lst = []
        for i in range(100000):
            lst.append(i)
        return  lst
    print(func())
    # 一次性打印全部结果,数据过大时特别消耗内存
    
    def func():
        for i in range(100000):
            yield i
    g = func()
    for i in range(50):
        print(next(g))
    # 每次打印可选的一部分,不用的部分不打印,节省空间
    

    yield from
    将一个可迭代对象的元素逐个返回

    def func():
        lst = ["牛羊配","老奶奶花生米","卫龙","瞎扯淡","米老头","老干妈"]
        for i in lst:
            yield i
    g = func()
    print(next(g))
    print(next(g))
    print(next(g))
    print(next(g))
    print(next(g))
    # 牛羊配
    # 老奶奶花生米
    # 卫龙
    # 瞎扯淡
    # 米老头
    
    def func():
        lst1 = ["牛羊配","老奶奶花生米","卫龙","虾扯蛋","米老头","老干妈"]
        lst2 = ["小浣熊","老干爹","亲嘴烧","麻辣烫","黄焖鸡","井盖"]
        yield from lst1
        yield from lst2
    g = func()
    print(next(g))
    print(next(g))
    print(next(g))
    print(next(g))
    
    # 牛羊配
    # 老奶奶花生米
    # 卫龙
    # 虾扯蛋
    # 所以循环第一个列表直到全部打印再循环第二个
    
    

    2.推导式

    循环模式

    lst = []
    for i in range(20):    
    lst.append(i)
    print(lst)
    
    转换list推导式
    print([i for i in range(20)])
    
    [变量 for i in range(20)]
    
    

    筛选模式

    lst = []
    for i in range(20):
        if i % 2 == 0:
            lst.append(i)
    print(lst)
    
    转换成list表达式
    [print([i for i in range(20) if i % 2 == 0])]
    
    [变量(加工后的变量) for循环 加工方式]
    
    其他例子:
    print([i for i in range(50) if i % 2 ==1])
    print([i for i in range(1,50,2)])
    

    循环模式

    生成器:
    g = (i for i in range(20))
    print(next(g))
    print(next(g))
    print(next(g))
    # 0 1 2 
    转换成列表
    print(list((i for i in range(20))))
    

    字典推导式(了解)

    print({i:i+1 for i in range(10)})
    print({i:i+1 for i in range(10) if i % 2 == 0})
    {键:值 for循环 加工条件}
    

    集合推导式(了解)

    print({i for i in range(10)})
    print({i for i in range(10) if i % 2 == 0})
    

    总结:

    list:
    [变量(加工后的变量) for循环]
    [变量(加工后的变量) for循环 加工条件]
    
    生成器表达式:
    (变量(加工后的变量) for循环)
    (变量(加工后的变量) for循环 加工条件)
    
    字典推导式:
    {键:值 for循环 加工条件}
    
    集合推导式:
    {变量(加工后的变量) for循环 加工条件}
    

    3.内置函数(一)

    eval() 执行字符串类型的代码,并返回最终结果
    exec() 执行字符串类型的代码
    以上两个函数很强大,工作中禁止使用
    
    hash() 获取一个对象(可哈希对象:int,str,bool,tuple)的哈希值
    help() 函数用于查看函数或模块用途的详细说明
    callable() 函数用于检查一个对象是否是可调用的,如果返回True,仍然可能调用失败;但如果返回False,调用对象object绝对不会成功
    int() 函数用于将一个字符串或数字转换为整型
    float() 函数用于将整数和字符串转换成浮点数
    complex:函数用于创建一个值为 real + imag*j 的复数.如果第一个参数为字符串,则不需要指定第二个参数
    bin() 将十进制转换成二进制
    oct() 将十进制转换成十六进制字符串并返回
    divmod() 计算除数与被除数的结果,返回一个包含商和余数的元组
    round() 保留浮点数的小数位数,默认保留整数
    pow() 求x**y次幂
    bytes() 用于不同编码之间的转化
    ord() 输入当前编码的位置数字找出其对应的字符
    repr() 返回一个对象的string形式
    all() 可迭代对象中,全都是True才是True
    any() 可迭代对象中,有一个True 就是True
    
    
  • 相关阅读:
    bzoj 1295 [SCOI2009]最长距离 最短路
    bzoj 3669 [Noi2014]魔法森林
    bzoj 1432 [ZJOI2009]Function 思想
    用JSP输出Hello World
    Web开发基础
    JSP相关背景
    JSP概述
    Java视频播放器的制作
    为JFileChooser设定扩展名过滤
    使用JFileChooser保存文件
  • 原文地址:https://www.cnblogs.com/beichen123/p/11240853.html
Copyright © 2011-2022 走看看