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

相关推荐

  • DevOps 风向标!DevOps国际峰会6月29日正式启航!

    DOIS 大会为您呈现互联网公司与海外企业的实践经验与工具技术,聚焦 DevOps 在金融、电信、零售等行业的系统性实践。在这里我们不空谈、不务虚,实实在在的专注DevOps落地。

    2018-05-16
  • python学习第七周个人总结

    LEGB、递归函数、匿名函数、生成器函数、生成器应用、高阶函数、柯里化、装饰器、类型注解、functools.个人总结,加深印象。

    2018-04-22
  • 解析式

    列表解析式和字典解析式 datetime模块 对日期,时间,时间戳的处理 datetime类 today()返回本地时区当前的datetime对象 now(tz=None)返回当前时间的datetime对象,时间到微秒,如果tz为None,返回和today()一样 utcnow()没有时区的当前时间 fromtimestamp(timestamp,tz=Zo…

    2018-04-09
  • queue,threading,user_agents

    queue 模块 队列
    threading 模块 线程
    user_agents 浏览器信息提取

    2018-05-07
  • 面向对象,魔术方法

    面向对象 一面向对象 什么是面向对象: 一种认识世界、分析世界的方法论。将万事万物抽象为类。 类class: 类是抽象的概念,是万事万物的抽象,是一类事物的共同集合的集合。 用计算机语言来描述类,就是属性和方法的集合。 对象instance,object: 对象是类的具象,是一个实体。 每个个体都是抽象类的不同实体。 哲学 一切皆对象 对象是数据和操作的封装…

    Python笔记 2018-05-14
  • 装饰器

    装饰器 需求 一个加法函数,想增强它的功能,能够输出被调用过以及调用的参数信息 def add(x, y): return x + y 增加信息输出功能 def add(x, y): print(“call add, x + y”)  # 日志输出到控制台 return x + y p 上面的加法函数是完成了需求,但是有以下的缺点 打…

    Python笔记 2018-04-23