装饰器之高阶函数

高阶函数概念引入:满足下面两个条件之一便可以称为高阶函数

1:把一个函数的函数名当作实参传给另外一个函数。

2:返回值中包含函数名。

下面是一段简单的高阶函数的代码使用条件1:

# Author:Ju BO
‘‘‘
def bar():
    print("in the bar")
def test1(func):
    print(func) #----相当于打印bar这个函数在内存中的门牌号即内存地址
    func()#----相当于bar(),调用bar这个函数
test1(bar)#----将bar函数名当作实参传给test1函数,test1函数用形参func来接收它。
‘‘‘

下面是一段在第一段代码的基础上新增了一些功能的高阶函数,从中也慢慢显示出了装饰器的影子。

#----改进------------------
#这段代码的功能为统计bar这个函数的运行时间
import time #---导入库
def bar():
    time.sleep(3) #---等3秒
    print("in the bar")
def test1(func):
    start_time = time.time() #----截取开始时间
    func() #---相当于bar(),运行bar这个函数
    stop_time = time.time() #-----截取结束时间
    print("the func run time is %s"%(stop_time - start_time))#---结束时间-开始时间 = bar的运行时间
test1(bar) #--将bar当作实参传递给test1

3:观察第二段代码发现貌似已经实现了装饰函数的功能,之前没有test1这个函数时,bar这个函数单纯的功能为打印“in the bar”,而现在test1这个函数附加了一个功能:计算bar这个函数的运行时间。那么根据装饰器的定义:本质是函数,目的是为其他函数添加附加功能,test1这个函数可以称之为装饰器吗?其实不然,暂时还不能称它为装饰器。因为要称之为装饰器,必须还要遵循2个原则:

(1):不能修改被装饰函数的源代码。

(2):不能修改被装饰的函数的调用方式。

4:为什么不能称test1为装饰器呢?原因很简单,依据3中提出的两个原则:首先明确bar是要被装饰的函数,test1该函数并没有修改它的源代码,满足第一条。但是显然第二条原则不满足,之前我们调用bar这个函数时是这样调用的:bar(),但是现在变成这样了:test1(bar),然后再在test1函数中调用bar,改变了bar这个函数的调用方式

5:综上上述只能称之为高阶函数:并且使用了高阶函数的第一个条件。

原文地址:https://www.cnblogs.com/jb9527/p/10311860.html

时间: 2024-11-05 20:49:20

装饰器之高阶函数的相关文章

5.初识python装饰器 高阶函数+闭包+函数嵌套=装饰器

一.什么是装饰器? 实际上装饰器就是个函数,这个函数可以为其他函数提供附加的功能. 装饰器在给其他函数添加功能时,不会修改原函数的源代码,不会修改原函数的调用方式. 高阶函数+函数嵌套+闭包 = 装饰器 1.1什么是高阶函数? 1.1.1函数接收的参数,包涵一个函数名. 1.1.2 函数的返回值是一个函数名. 其实这两个条件都很好满足,下面就是一个高阶函数的例子. def test1(): print "hamasaki ayumi" def test2(func): return t

190401装饰器-高阶函数-闭包

一.装饰器 装饰器本质是函数 为其他函数添加附加功能 不修改被修饰函数的源代码 不修改被修饰函数的调用方式 装饰器示例 import time def timmer(func): def wrapper(*args,**kwargs): start_time = time.time() res = func(*args,**kwargs) stop_time = time.time() print("函数的运行时间:%s" % (stop_time - start_time)) ret

python 高阶函数与装饰器

高阶函数定义1.函数接收的参数是一个函数名2.函数的返回值是一个函数名以上两者满足任意一个,就是高阶函数 装饰器定义本质就是函数,功能是为其他函数添加新功能 装饰器的原则 1.不修改被装饰函数的源代码(开放封闭原则) 2.为被装饰函数添加新功能后,不修改被修饰函数的调用方式 装饰器=高阶函数+函数嵌套+闭包     # 无返回值无参数 import time def timer(func): #func = test def w(): start_time = time.time() func(

Python高阶函数与函数装饰器-day4

上节回顾 高阶函数 闭包函数 函数装饰器 模块导入 一.上节回顾 Python2与Python3字符编码问题,不管你是初学者还是已经对Python的项目了如指掌了,都会犯一些编码上面的错误.我在这里简单归纳Python3和Python2各自的区别. 首先是Python3-->代码文件都是用utf-8来解释的.将代码和文件读到内存中就变成了Unicode,这也就是为什么Python只有encode没有decode了,因为内存中都将字符编码变成了Unicode,而Unicode是万国码,可以"

python学习笔记之函数总结--高阶函数以及装饰器

python学习笔记之函数总结--高阶函数以及装饰器 Python特点: 1.不是纯函数式编程(允许变量存在): 2.支持高阶函数(可以传入函数作为变量): 3.支持闭包(可以返回函数): 4.有限度的支持匿名函数: 高阶函数: 1.变量可以指向函数: 2.函数的参数可以接收变量: 3.一个函数可以接收另一个函数作为参数: 下面我将示例一些函数的写法以及使用,并说明python中函数的特性: 1.基本的高阶函数示例: #!/usr/bin/env python def func():      

002_第三部分_[函数 / 高阶函数 / 装饰器]

一.高阶函数: 顺序排序 enumerate([1,2 ,3 , 4, 5]) for idx, item in enumerate([1, 2, 3, 4]):     print(idex)     print(item) def sort(*args):     ret = []     for item in args:         for i, v in enumerate(ret):             if item > v:                 ret.ins

高阶函数和装饰器

函数式:一种编程范式 纯函数式编程:没有变量,支持高阶函数编程 Python不是纯函数式编程语言,支持高阶函数编程 变量可以指向函数,函数名就是指向函数的一个变量,与普通变量没有区别 高阶函数:能接收函数做参数的函数. map():是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回. def f(x): return x*x print map(f, [1, 2, 3, 4, 5, 6, 7

python学习笔记4:高阶函数,装饰器,生成器,迭代器

一.高级函数1.把一个函数名当作实参传给另一个函数2.返回值包含函数名>>> def bar():... print ("in the bar")... >>> def foo(func):... res=func()... return res... >>> foo(bar)in the bar 二.嵌套函数在函数中定义另一个函数 三.装饰器装饰器本质上是函数,作用是装饰其他函数,就是为其他函数添加附加功能.原则1:不能修改被装饰

Go的魅力, 函数式(柯里化, 闭包, 高阶函数), [email protected]装饰器, 封装

Go朴实无华的代码风格是函数式的无尽魅力. 函数式有3个别名, 高大上的"柯里化", 编程语言的"闭包", 数学气息的"高阶函数". Python没有Go的func匿名函数, 但是具有可爱的语法糖(@装饰器). 编程语言都是相通的, 层层封装造就了灵活的风格. 理解了Go的"函数式", 再理解内嵌/接口/重写(设计模式), 剩下的是各个领域的工具了, 就可以写出服务于业务的代码. 感悟于 函数式 http://www.jian