zoukankan      html  css  js  c++  java
  • 复习4

    把函数作为参数传入,这样的函数称为高阶函数,函数式编程就是指这
    种高度抽象的编程范式。

    ,Iterator 是惰性序列,因此通过 list()函数让它把整个序列都
    计算出来并返回一个 list

    map()作为高阶函数,事实上它把运算规则抽象了

    Python 内建的 filter()函数用于过滤序列。
    和 map()类似,filter()也接收一个函数和一个序列。和 map()不同的时,
    filter()把传入的函数依次作用于每个元素,然后根据返回值是 True 还
    是 False 决定保留还是丢弃该元素。

    Python 内置的 sorted()函数就可以对 list 进行排序:

    ,sorted()函数也是一个高阶函数,它还可以接收一个 key 函数来
    实现自定义的排序,例如按绝对值大小排序:

    sorted([36, 5, -12, 9, -21], key=abs) [5, 9, -12, -21, 36]

    key 指定的函数将作用于 list 的每一个元素上,并根据 key 函数返回的
    结果进行排序。

    我们给 sorted 传入 key 函数,即可实现忽略大小写的排序:
    >>> sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower) ['about', 'bob', 'Credit', 'Zoo']

    要进行反向排序,不必改动key函数,可以传入第三个参数reverse=True:
     
    >>> sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower, reverse=True) ['Zoo', 'Credit', 'bob', 'about']

    高阶函数的抽象能力是非常强大的,而且,核心
    代码可以保持得非常简洁。

    在这个例子中,我们在函数 lazy_sum 中又定义了函数 sum,并且,内部
    函数 sum 可以引用外部函数 lazy_sum 的参数和局部变量,当 lazy_sum 返
    回函数 sum 时,相关参数和变量都保存在返回的函数中,这种称为“闭包
    (Closure)”的程序结构拥有极大的威力。

    返回闭包时牢记的一点就是:返回函数不要引用任何循环变量,或者后
    续会发生变化的变量。

    一个函数可以返回一个计算结果,也可以返回一个函数。
    返回一个函数时,牢记该函数并未执行,返回函数中不要引用任何可能
    会变化的变量

    关键字 lambda 表示匿名函数,冒号前面的 x 表示函数参数。
    匿名函数有个限制,就是只能有一个表达式,不用写 return,返回值就
    是该表达式的结果。

    用匿名函数有个好处,因为函数没有名字,不必担心函数名冲突。此外,
    匿名函数也是一个函数对象,也可以把匿名函数赋值给一个变量,再利
    用变量来调用该函数:

    ,也可以把匿名函数作为返回值返回,

    Python 对匿名函数的支持有限,只有一些简单的情况下可以使用匿名函
    数。

    假设我们要增强 now()函数的功能,比如,在函数调用前后自动
    打印日志,但又不希望修改 now()函数的定义,这种在代码运行期间动
    态增加功能的方式,称之为“装饰器”(Decorator)。

    本质上,decorator 就是一个返回函数的高阶函数。

    返回的那个 wrapper()函数名字就是'wrapper',所以,需要把原始函
    数的__name__等属性复制到 wrapper()函数中,否则,有些依赖函数签名
    的代码执行就会出错。

    不需要编写 wrapper.__name__ = func.__name__这样的代码,Python 内置
    的 functools.wraps 就是干这个事的,所以,一个完整的 decorator 的写
    法如下:
    import functools
     
    def log(func):     @functools.wraps(func)     def wrapper(*args, **kw):         print('call %s():' % func.__name__)         return func(*args, **kw)     return wrapper

    import functools 是导入 functools 模块。模块的概念稍候讲解。现在,
    只需记住在定义 wrapper()的前面加上@functools.wraps(func)即可。

    在面向对象(OOP)的设计模式中,decorator 被称为装饰模式。OOP
    的装饰模式需要通过继承和组合来实现,而 Python 除了能支持 OOP 的
    decorator 外,直接从语法层次支持 decorator。Python 的 decorator 可以
    用函数实现,也可以用类实现。
    decorator 可以增强函数的功能,定义起来虽然有点复杂,但使用起来非
    常灵活和方便。

    ,简单总结 functools.partial 的作用就是,把一个函数的某些参数
    给固定住(也就是设置默认值),返回一个新的函数,调用这个新函数
    会更简单

    当函数的参数个数太多,需要简化时,使用 functools.partial 可以创建
    一个新的函数,这个新函数可以固定住原函数的部分参数,从而在调用
    时更简单。

  • 相关阅读:
    多测师讲解html _伪类选择器17_高级讲师肖sir
    多测师讲解html _后代选择器16_高级讲师肖sir
    多测师讲解html _组合选择器_高级讲师肖sir
    多测师讲解html _标签选择器14_高级讲师肖sir
    前端 HTML form表单标签 input标签 type属性 重置按钮 reset
    前端 HTML form表单标签 textarea标签 多行文本
    前端 HTML form表单标签 input标签 type属性 file 上传文件
    前端 HTML form表单标签 input标签 type属性 radio 单选框
    前端 HTML form表单标签 input标签 type属性 checkbox 多选框
    前端 HTML form表单目录
  • 原文地址:https://www.cnblogs.com/charles7987/p/10165051.html
Copyright © 2011-2022 走看看