美文网首页
高级特性

高级特性

作者: Farewell_lpf | 来源:发表于2019-05-28 11:04 被阅读0次
    1.切片
    2.迭代

    默认dict迭代的是key

    >>> d = {'a': 1, 'b': 2, 'c': 3}
    >>> for key in d:
    ...     print(key)
    ...
    a
    c
    b
    

    如果迭代value 可以使用for value in d.values( )
    同时迭代key和value,可以使用 for k,v in d.items()
    如果要对list实现下表循环,python内置的enumerate函数可以把list变成索引元素对。

    >>> for i, value in enumerate(['A', 'B', 'C']):
    ...     print(i, value)
    ...
    0 A
    1 B
    2 C
    
    3.列表生成式
    可以直接创建一个列表
    [x*x for x in range(1,11)]
    [1,4,9.....,100]
    加上if判断
    [x*x for x in range(1,11) if x%2 == 0]
    二层循环,可以生成全排列
    [m+n for m in "ABC" for n in "XYZ"]
    使用多个变量
    [k +'='+v for k,v in d.itens()]
    将list中所有的字符串变成小写
    [s.lower() for s in L]
    

    判断变量是不是字符串
    isinstance(x,str)

    4.生成器(generator)

    列表生成式,可以直接创建一个列表,但是受内存限制,列表容量肯定是有限的,而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅需访问前面几个元素,那后面的绝大多数元素占用的空间将白白的浪费了。
    创建一个generator
    1.只要把一个列表生成式的[]改成()

    >>> g = (x * x for x in range(10))
    >>> g
    <generator object <genexpr> at 0x1022ef630>
    我们可以通过next()函数获得generator的每一个元素
    >>> next(g)
    0
    >>> next(g)
    1
    >>> next(g)
    4
    >>> next(g)
    

    generator保存的是算法,每次调用next(g),就计算出g的下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出StopIteration的错误。
    当然,上面这种不断调用next(g)实在是太变态了,正确的方法是使用for循环,因为generator也是可迭代对象:

    >>> g = (x * x for x in range(10))
    >>> for n in g:
    ...     print(n)
    ... 
    0
    1
    4
    

    2.generator的另一种方法。如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个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'
    
    5.迭代器

    凡是可作用于for循环的对象都是Iterable类型;

    凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;

    集合数据类型如list、dict、str等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。

    Python的for循环本质上就是通过不断调用next()函数实现的

    相关文章

      网友评论

          本文标题:高级特性

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