zoukankan      html  css  js  c++  java
  • 迭代器,生成器,三元运算,列表推导式

    已学的知识中,哪些是对象

    整型

    浮点型

    字符串

    列表

    元组

    字典

    集合

    文件

    函数

    可迭代对象

    可迭代对象有哪些?

    字符串

    列表

    字典

    集合

    文件

    总结:拥有iter方法的对象就是可迭代对象

    迭代器

    文件本身就是迭代器对象。

    with open("a.txt",'r',encoding="utf8") as f:
        print(f.__next__())  # 这里的f就是迭代器
    

    迭代器对象:拥有iter方法和next方法的就是迭代器对象

    文件既是可迭代对象,又是迭代器对象

    三元表达式

    # 普通的if判断
    x = 10
    y = 20
    if x < y:
        a = x
    else:
        a = y
    print(a)
        
        
    # 三元表达式:
    x = 10
    y = 20
    a = x if x < y else print y
    print(a)
    

    列表推导式

    list_plf = [i for i in rang(100) if i > 50]
    print(list_plf)
    
    
    dict_lt = {k:v for k,v in ==zip("abcdef",[1,2,3,4,5,6])== if v > 2}
    print(dict_lt)
    
    
    '''
    	总结:
    		列表推导式的逻辑判断最好是写在循环的后面
    
    '''
    

    生成器(yield)

    yield的英文单词意思是生产,在函数中但凡出现yield关键字,再调用函数,就不会继续执行函数体代码,而是返回一个值。

    def func():
        print(1)
        yield
        print(2)
        yield
    
    
    g = func()
    print(g)
    
    '''
    <generator object func at 0x10ddb6b48>
    '''
    

    生成器的本质就是迭代器,同时也并不仅仅是迭代器,不过迭代器之外的用途实在是不多,所以我们可以大声地说:生成器提供了非常方便的自定义迭代器的途径。并且从Python 2.5+开始,[PEP 342:通过增强生成器实现协同程序]的实现为生成器加入了更多的特性,这意味着生成器还可以完成更多的工作。这部分我们会在稍后的部分介绍。

    def func():
        print('from func 1')
        yield 'a'
        print('from func 2')
        yield 'b'
    
    
    g = func()
    print(F"g.__iter__ == g: {g.__iter__() == g}")
    
    res1 = g.__next__()
    print(f"res1: {res1}")
    
    res2 = next(g)
    print(f"res2: {res2}")
    
    # next(g)  # StopIteration
    
    '''
    g.__iter__ == g: True
    from func 1
    res1: a
    from func 2
    res2: b
    '''
    
    
    def func():
        print('from func 1')
        yield 'a'
        print('from func 2')
        yield 'b'
    
    
    g = func()
    for i in g:
        print(i)
    
    print(f"list(func()): {list(func())}")
    
    
    from func 1
    a
    from func 2
    b
    from func 1
    from func 2
    list(func()): ['a', 'b']
    

    yield和return的区别

    yield:接受函数返回值,但是函数不退出

    return:接受函数返回值,但是函数会退出

    def i_wanna_return():
        yield 'a'
        yield 'b'
        return None
        yield 'c'
    
    for i in i_wanna_return():
        print(i)
        
    '''
    a
    b
    '''
    

    生成器表达式和列表推导式的区别

    # 生成器
    a = (i for i in range(10))
    print(a)
    
    '''
    <generator object <genexpr> at 0x0000007B33E396D0>
    '''
    
    # 列表推导式
    b = [i for i in range(10)]
    print(b)
    
    '''
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    '''
    
    '''
    	总结:
    		1. 列表推导式相当于直接给你一筐蛋,而生成器表达式相对于给你一个母鸡。
    		2. 从内存的角度看,生成器更节省空间
    
    '''
    

    总结

    yield

    1. 提供一种自定义迭代器的方式
    2. yield可以暂停住函数,并提供当前的返回值

    yield和return

    1. 相同点:两者都是在函数内部使用,都可以返回值,并且返回值没有类型和个数的限制
    2. 不同点:return只能返回一次之;yield可以返回多次值

    生成器表达式和列表推导式的区别

    1. 列表推导式相当于直接给你一筐蛋,而生成器表达式相对于给你一个母鸡。
    2. 从内存的角度看,生成器更节省空间
  • 相关阅读:
    DBA 职责及日常工作职责
    mysql 语句笔记
    学习Groovy — 闭包
    linux 命令: 网络和进程
    linux命令: rm命令
    Pro Git-- 跟踪分支
    Redis Tutorial
    linux 命令--文件操作
    分库分表的几种常见形式
    乐观锁与悲观锁
  • 原文地址:https://www.cnblogs.com/plf-Jack/p/10969197.html
Copyright © 2011-2022 走看看