函数名的应用/列表推导式

函数名的运用:

        1,特殊的变量。

        2,函数名可以当做变量赋值。

        3,函数名可以当做容器类类型的元素。

        4,函数名可以当做函数的参数。

        5,函数名可以当做函数的返回值

    闭包:

        1,内层函数对外层函数的变量(非全局)的引用。

        2,闭包存在于函数中。

        3,闭包要逐层返回,最终返回到函数的最外层。

    特点:

        解释器遇到闭包,不会随着函数的结束而结束空间

    闭包应用:

        装饰器。

        爬虫。

 

    可迭代对象:

        obj

        '__iter__' in dir(obj)

        from collections import Iterable

        isinstance(obj, Iterable)

        可迭代对象不能直接取值,必须转化成迭代器进行取值(__next__)

 

    迭代器:

        '__iter__' in dir(obj) and '__next__' in dir(obj)

         from collections import Iterator

        isinstance(obj, Iterator)

    一个next 对应一个元素

    l1 = [1, 2, 3,]

    obj = iter(l1)

    while True:

        try:

            print(obj.__next__())

        except Exception:

            Break

 

 

 

 

 

 

 

 

 

 

生成器:本质就是迭代器,自己用python代码构建的迭代器。

    1,生成器函数。(yield)

    2,生成器表达式。(i for i in range(100))

    生成器对象:gentor

        next(gentor)

        send(gentor)

        for 循环

    yield 与 return 区别?

 

    send:

        给上一个yield发送一个值

        send 对应yield取值。

 

    next:

        对应一个yield 取值。

 

    yield from 将一个可迭代对象变成一个迭代器返回。

 

    列表推导式:

        循环模式:[变量(加工后的变量) for 变量 in iterable]

        三元模式:['*' if a > b else 变量  for 变量 in iterable]

        筛选模式:[变量(加工后的变量) for 变量 in iterable if 条件]

        优点:

            一行代码搞定,简单,高逼格。

        缺点:有毒。不能采用debug模式查错。

    生成器表达式:与上面相同,将[] 换成()

posted @ 2019-01-10 20:25  L公子  阅读(201)  评论(0编辑  收藏  举报