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

    迭代器

    可迭代对象

    • 拥有iter方法的对象就是可迭代对象
    # 以下都是可迭代的对象
    
    st = '123'.__iter__()
    lis = [1, 2, 3].__iter__()
    tup = (1, 2, 3).__iter__()
    dic = {1: 'one', 2: 'two', 3: 'three'}.__iter__()
    se = {1, 2, 3}.__iter__()
    with open (r'123.txt', 'w', encoding='utf-8') as fw:
        fw.__iter__()
    

    迭代器对象

    • 拥有next方法的可迭代对象就是迭代器对象
    # 依赖索引的数据类型迭代取值
    lis = [1, 2, 3]
    iter_lis = lis.__iter__() # 把可迭代对象变成迭代器对象
    print(iter_lis.__next__())
    print(iter_lis.__next__())
    print(iter_lis.__next__())
    
    1
    2
    3
    
    # 不依赖索引的数据类型迭代取值
    dic = {1: 'one', 2: 'two', 3: 'three'}
    iter_dic = dic.__iter__()
    print(iter_dic.__next__())
    print(iter_dic.__next__())
    print(iter_dic.__next__())
    
    1
    2
    3
    

    __next__其实是在遍历可迭代对象的元素,一旦遍历完报错

    hobby_list2 = ['run','read']
    count = 0
    while True:
        print(hobby_list2[count])
        count += 1
        if count == len(hobby_list2):
            break
    
    run
    read
    
    • for循环不依赖索引取值
    • 这一段代码如果用c写,就是for循环的原理
    hobby_list = ['run', 'read']
    hobby_list_iter = hobby_list.__iter__()
    while True:
        try:
            print(hobby_list_iter.__next__())
        except:
            break
            
    
    run
    read
    
    for i in hobby_list:  # for循环自动帮我们把变量变成了可迭代对象
        print(i)
    
    run
    read
    
    print(hobby_list)       # 一筐鸡蛋
    print(hobby_list.__iter__())  # 相比较列表,它节省内存空间,老母鸡
    

    总结

    1. 可迭代对象: 拥有iter方法的对象就是可迭代对象,可迭代对象不一定是迭代器对象,文件就是特例
    2. 迭代器对象: 拥有next方法的可迭代对象就是迭代器对象.迭代器对象一定是可迭代对象
    3. 文件既是可迭代对象,又是迭代器对象

    三元表达式(三目表达式)

    • 只有else没有elif
    x = 7
    if x == 7:
        print(x)
    else:
        print(x**2)
    
    7
    
    # 不推荐使用,写代码还是尽量整洁易懂
    print(x) if x == 7 else print(x**2)
    
    7
    

    列表推导式

    lis = []
    for i in range(10):
        lis.append(i)
    print(lis)
    
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    
    # 不推荐写
    print([i for i in range(10)])
    
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    
    # 及其不推荐写,不然会被当成傻逼
    print([i*2 if i>5 else i for i in range(10)])
    
    [0, 1, 2, 3, 4, 5, 12, 14, 16, 18]
    

    字典生成式

    dic = {i:i*2 for i in range(5)}
    print(dic)
    
    {0: 0, 1: 2, 2: 4, 3: 6, 4: 8}
    
    ## 拉链函数
    res = zip('abcd', [1,2,3,4])
    dic = dict()
    for k,v in res:
        dic[k] = v
    print(dic)
    
    {'a': 1, 'b': 2, 'c': 3, 'd': 4}
    
    print({k:v for k,v in zip('abcd', [1,2,3])})
    
    {'a': 1, 'b': 2, 'c': 3}
  • 相关阅读:
    土地出让金骤降是“危”还是“机”?
    EasyMonkeyDevice vs MonkeyDevice&HierarchyViewer API Mapping Matrix
    Keepalived+Lvs+Mysql主主复制
    【SDUT 3038】迷之博弈
    js面向对象编程:if中能够使用那些作为推断条件呢?
    crm使用url打开窗口视图
    让你的javascript函数拥有记忆功能,降低全局变量的使用
    crm操作知识库文章实体
    技术揭秘12306改造(一):尖峰日PV值297亿下可每秒出票1032张-CSDN.NET
    大众点评的大数据实践-CSDN.NET
  • 原文地址:https://www.cnblogs.com/lucky75/p/10969800.html
Copyright © 2011-2022 走看看