美文网首页Editor程序员
Python基础学习4:高级特性

Python基础学习4:高级特性

作者: Andy_Ron | 来源:发表于2017-10-02 08:17 被阅读44次

    切片 (list, tuple, 字符串)

    • L[0:3] / L[:3]
      从索引0开始取,直到索引3为止,但不包括索引3。
    • L[-1]
      倒数第一个
    • L[:10:2]
      前10个数,每两个取一个
    • L[::5]
      所有数,每5个取一个

    迭代(for in)

    • 任何 可迭代对象 都可以,如:list, tuple, dict, 字符串。

    • 默认情况下,dict迭代的是key。如果要迭代value,可以用for value in d.values(),如果要同时迭代key和value,可以用for k, v in d.items()

    • 判断是否可迭代(通过collections模块的Iterable类型判断):

            from collections import Iterable
    
            isinstance('abc', Iterable) # str是否可迭代
            isinstance(123, Iterable) # 整数是否可迭代 
    
    • dict的存储不是按照list的方式顺序排列,所以,迭代出的结果顺序很可能不一样。

    列表生成式(List Comprehensions)

    • 运用列表生成式,可以快速生成list,可以通过一个list推导出另一个list,而代码却十分简洁。
    • [x*x for x in range(1, 11)] => [1x1, 2x2, 3x3, ..., 10x10] ([1, 4, 9, 16, 25, 36, 49, 64, 81, 100])
    • [x * x for x in range(1, 11) if x % 2 == 0] => [4, 16, 36, 64, 100]
    • [m + n for m in 'ABC' for n in 'XYZ'] => ['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
    • [d for d in os.listdir('.')] 列出当前目录下文件和目录
    >>> d = {'x': 'A', 'y': 'B', 'z': 'C' }
    >>> [k + '=' + v for k, v in d.items()]
    ['y=B', 'x=A', 'z=C']
    
    L1 = ['Hello', 'World', 18, 'Apple', None]
    [s.lower() for s in L2 if isinstance(s, str)]
    

    生成器Generator(保存的是算法)

    • 生成器Generator:一边循环一边计算的机制
    • 创建generator的方法
      • 把一个列表生成式的[]改成()
      >>> L = [x * x for x in range(10)]
      >>> L
      [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
      >>> g = (x * x for x in range(10))
      >>> g
      <generator object <genexpr> at 0x1022ef630>
      
    • generator保存的是算法,每次调用next(g),就计算出g的下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出StopIteration的错误。(也可直接用for in,就没有StopIteration的错误)
    • 例子
    g = (x*x for x in range(10))
    for n in g:
        print n 
    
    • 如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator

    函数:

    def fib(max):
        n, a, b = 0, 0, 1
        while n < max:
            print(b)
            a, b = b, a + b
            n = n + 1
        return 'done'
    

    generator:

    def fib(max):
        n, a, b = 0, 0, 1
        while n < max:
            yield b
            a, b = b, a + b
            n = n + 1
        return 'done'
    
    • 函数是顺序执行,遇到return语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。
    def odd():
        print('step 1')
        yield 1
        print('step 2')
        yield(3)
        print('step 3')
        yield(5)
    
    >>> o = odd()
    >>> next(o)
    step 1
    1
    >>> next(o)
    step 2
    3
    >>> next(o)
    step 3
    5
    >>> next(o)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    StopIteration
    

    参考:《Python教程》

    相关文章

      网友评论

        本文标题:Python基础学习4:高级特性

        本文链接:https://www.haomeiwen.com/subject/gtsyextx.html