• Python学习笔记4 高级特性_20170618


    # 切片(获取list / tuple / 字符串 中指定的元素)

    l = list(range(10))
    l[0:3]
    l[:3] # 0可以省略
    l[:] # 全部
    l[3:] # 最后的可以省略
    l[-2:-1] # 负数下标,见python笔记2中介绍
    l[-10:] # 取最后10个数
    l[::2] # 所有数,每个两个取出

    # 迭代

    • 通过 for ... in ...
    • 可迭代对象:list、tuple、字符串已经在pythonb笔记2中提到了。
    • 判断是否可迭代
    from collections import Iterable
    isinstance('abc', Iterable)
    • 将 list 转化成可以使用下标操作
    for i, value in enumerate(['A','B','C']) :
        print(i, value)
    • 同时引用两个变量
    for x,y in [(1,2), (3,4)] :
        print(x, y)

    # 列表生成式(一句话生成需要的 list)

    • range
    list(range(2,10))
    • 通用方法
    [x*x for x in range(1,10)]
    [x*x for x in range(1,10) if x%2 == 0]
    [m+n for m in 'ABCD' for n in '12345']
    • dict 情况
    d = {'x':'A', 'y':'B'}
    >>>[k+'='+c for k,v in d.items()]
    ['x=A', 'y=B']

    # 生成器(得到的是“函数”规则,而非结果)

    • 列表生产式相关(将中括号改成小括号)
    g = (x*x for x in range(10))
    >>>next(g) # 获得生成器的结果
    • 函数相关(在需要停的位置添加yield,比如改 print 为 yield)
    # 函数
    def dplist(l) : 
        for sub in l :
            print(sub)
        return 'done'
    
    # 生成器
    def dplist(l) : 
        for sub in l :
            yield(sub)
        return 'done'

      添加了 yield 的地方更像是一个函数的运行断点,每次运行都是承接上次的运行结果。不会循环,到末了就会报终止错误,该错误可以catch

    • 捕获错误
    >>>def dplist() : 
        for sub in range(10) :
            yield(sub)
        return 'done'
    
    
    >>>g = dplist()
    >>>while True: try: x=next(g) print('g = ', x) except StopIteration as e: print('Genearator return vaue : ', e.value) break

    # 迭代器

    可以用于for循环的:list、tuple、dict、set、str、生成器(generator)等

    • 以上可以直接作用于 for 的,称为“可迭代对象”(Iterable)

      判断方法

    from collections import Iterable
    >>>isinstance([], Iterable)
    • “迭代器对象”(Iterator)
    from collections import Iterator
    >>>isinstance([], Iterator)

    生成器才是“迭代对象”,可以使用next

    list、tuple、dict、set、str、生成器(generator)是“可迭代”对象,不能使用next

    • Iterable转化为Iterator,使用 iter()
    isinstance(iter([]), Iterator)
    • 迭代器什么用:

      迭代器因为是一种规则,所以理论上可以表示所有的整数。但是诸如 list 就不可以。

  • 相关阅读:
    动态改变Spring定时任务执行频率
    tomcat
    liunx命令
    idea 使用笔记
    redis 笔记
    学习笔记 Optional
    JPA Example 基本使用使用实例
    面试经验总结
    基于LAMP实现后台活动发布和前端扫码签到系统
    XV6源代码阅读-文件系统
  • 原文地址:https://www.cnblogs.com/alexYuin/p/7044453.html
Copyright © 2020-2023  润新知