Python高阶函数及装饰器

First Class Object

函数在Python中是一等公民

函数也是对象,可调用的对象

函数可作为普通变量、参数、返回值等

高阶函数

数学定义:y=g(f(x))

高阶函数需满足的条件,至少其一

接受一个或多个函数作为参数

输出一个函数

Python高阶函数及装饰器

Python高阶函数及装饰器

内建函数的高阶函数

排序:sorted(iterable[,key][,reverse])

返回一个新列表,对一个可迭代对象的所有元素排序,排序规则为key定义的函数,reverse表示是否翻转

Python高阶函数及装饰器

数据过滤:filter(function,iterable)

过滤可迭代对象的元素,返回一个迭代器

Function是一个具有参数的函数,返回bool

Python高阶函数及装饰器

映射:map(function,*iterables)

对多个可迭代对象的元素按照指定的函数进行映射,返回一个迭代器

Python高阶函数及装饰器

柯里化Currying

将原来接受两个参数的函数变成新的接受一个参数的函数的过程。新的函数返回一个以原有第二个参数为参数的函数

z=f(x,y)转化为z=f(x)(y)

Python高阶函数及装饰器

通过嵌套函数即可将函数转化成柯里化函数

装饰器

装饰器(无参)

是一个函数

函数作为它的形参

返回值也是一个函数

使用@function方式简化调用

副作用:原函数对象的属性在使用装饰器时会被修改

装饰器和高阶函数

装饰器是高阶函数,但装饰器是对传入函数的功能的装饰,即功能的增强

装饰器函数():

前置功能增强 #被装饰函数执行前运行

被增强函数

后置功能增强 #被装饰函数执行后运行

文档字符串

Documentation Strings

在函数语句块的第一行,习惯使用多行文本,多使用三引号

惯例首字母大写,第一行概述,空一行,第三行开始详细描述

可使用特殊属性__doc__访问该文档

装饰器(带参)

是一个函数

函数作为它的形参

返回值是一个不带参的装饰器函数

使用@function(形参列表)但是调用

可以看做在装饰器外层又加了一层函数

Python高阶函数及装饰器

Python高阶函数及装饰器

functools模块

functools.update_wrapper(wrapper, wrapped, assigned=(‘__module__’, ‘__name__’, ‘__qualname__’, ‘__doc__’, ‘__annotations__’), updated=(‘__dict__’,))

类似copy_property

wrapper包装函数、被更新者、wrapped被包装函数、数据源

assigned中是要被覆盖的属性,模块名、名称、限定名、文档、参数注解

updated中是要被更新的属性

增加一个__wrapped__属性,wrapped函数仍然保留

functools.wraps(wrapped, assigned=(‘__module__’, ‘__name__’, ‘__qualname__’, ‘__doc__’, ‘__annotations__’), updated=(‘__dict__’,))

类似copy_property

wrapped 被包装函数

assigned中是要被覆盖的属性,模块名、名称、限定名、文档、参数注解

updated中是要被更新的属性

增加一个__wrapped__属性,wrapped函数仍然保留

原创文章,作者:ZBD20,如若转载,请注明出处:http://www.178linux.com/96886

(0)
ZBD20ZBD20
上一篇 2018-04-22
下一篇 2018-04-23

相关推荐

  • Python文件操作

    计算机体系架构 运算器:完成各种算术运算、逻辑运算、出具传输等数据加工处理 控制器:控制程序的执行 CPU = 运算器 + 控制器 存储器:用于记忆程序的数据,内存 输入设备:将数据或程序输入到计算机中 输出设备:将数据或程序的处理结果展示给用户 文件IO常用操作 open 打开 read 读取 write 写入 close 关闭 readline 行读取 …

    Python笔记 2018-05-02
  • 面向对象之魔术方法

    特殊属性 属性 含义 __name__ 类、函数、方法的名称 __module__ 类定义所在的模块名 __class__ 对象或类所属的类 __bases__ 类的基类的元组,顺序为它们在基类列表中出现的顺序 __doc__ 类、函数的文档字符串,若没定义则为None __mro__ 类的mro,方法查找顺序 __dict__ 类或实例的属性,可写的字典 …

    2018-05-20
  • Linux介绍

    Linux介绍 Linux概述 Linux概述 Linux内核由芬兰人Linus Torvalds 1991年根据386架构开发。Linux是系统的内核并非系统,之后的RED HALT 、Centos等都是以Linux为内核的类UNIX操作系统。 1969年UNIX系统由THOMPSON和D.M.Riche在美国贝尔实验室开发 1990年芬兰人Linus T…

    Python笔记 2018-03-26
  • Python 部分知识点总结(八)

    此篇博客只是记录第十周未掌握或不熟悉的知识点,用来加深印象。

    Python笔记 2018-05-13
  • 函数与生成器

    函数 由若干语句组成的语句块,函数名,参数列表构成,是组织代码的最小单元,完成一定的功能,结构化编程对代码的最基本的封装,封装的目的是为了复用 函数中没有return,隐式会返回一个none值 定义中的参数列表成为形式参数,只是一种形式表达,简称形参 调用时写的参数是实际参数,是实实在在传入的值,简称实参 函数的定义,只是声明了参数,不会执行,可以进行调用,…

    2018-04-16
  • Python第三周小结

    经过了三周的学习,我们已经基本完成了Python基础数据结构的学习,包括列表,字符串,元组,bytes, bytearray, set, 字典等。为了更好的理解和熟练使用这些基本的数据结构,我将它们各自的特点分别总结 并做成了表格,希望能够帮助我们更好的理解的同时,熟练掌握这些数据结构。    

    2018-04-10