在不改变函数的结构的基础,我们给函数加新的功能,用是函数装饰器,如果要给函数传递参数,那么应该怎么做呢 @timerdef test2(name,age): time.sleep(3) print('name: %s age: %s' % (name, age)) test2('dongye',33) def timer(func): #是test2函数,高阶函数 def deco(*args,**kwargs):  start_time=time.time() func(*args,**kwa…
楔子 前提,我有一段代码(一个函数). import time def run_time(): time.sleep(0.1) print('我曾踏足山巅') 需求1:现在,我想计算这段代码的运行时间. 我可以这样做: import time def run_time(): start_time = time.time() time.sleep(0.1) print('我曾踏足山巅') end_time = time.time() run_t = end_time - start_time pr…
装饰器 本质是函数,装饰其他函数,为其他函数添加附加功能 原则: 1不修改原函数的源代码 2不修改原函数的调用方式 知识储备: 1函数即变量 使用门牌号的例子说明函数,调用方式与变量一致 2高阶函数 bar() bar(内存地址门牌号,指针) 例子:在不修改源码的情况下附加功能,把一个函数当做实参传给另一个函数,返回值中包含函数名 3嵌套函数 在函数体中定义新函数,注意调用方式与作用域 利用高阶函数和嵌套函数实现装饰器的效果 几种情况,从简单到复杂: 被装饰函数无参数 被装饰函数多参数 被装饰函…
装饰器 首先,给出装饰器的框架: def log(func): def wrapper(*args, **kw): print('call %s():' % func.__name__) return func(*args, **kw) return wrapper @log def now(): print('2018-6-14') Python装饰器,本质上就是一个高阶函数.作用是给其它函数增加新的功能.借用python的@语法,可以将一个高阶函数定义为装饰器. @符号的作用 但是,在学习廖…
装饰器 什么是装饰器? 装饰:给已有的对象(函数)添加新的功能 器:工具              在python中指具备某些功能的函数 装饰器:装饰器就是一个给其他函数增加功能的函数 一种设计原则: 开闭原则:对扩展开放 对修改封闭 装饰器怎么用 我们用一个例子说明装饰器的作用及用法 例子: 现需要统计一段程序运行的时间 #统计程序运行时间,首先我们写一个程序 import time def index(): time.sleep(1) print('login') #以上就是一个打印logi…
装饰器 定义:本质是函数,(装饰其他函数)就是为其他函数添加附加功能.原则:1.不能修改被装饰的函数的源代码 2.不能修改被装饰的函数的调用方式 实现装饰器的知识储备: 1.函数即“变量” 2.高阶函数(满足下列条件之一就是高阶函数) a:把一个函数名当作形参传给另一个函数(在不修改被装饰函数源代码的情况下修改其功能,但是调用方式变了) b:返回值中包含函数名(不修改函数的调用方式,而修改函数功能) 3.嵌套函数 总结: 高阶函数+嵌套函数=>装饰器 1. 函数即变量 def bar(): #这…
本章讨论的话题 python如何计算装饰器句法 python如何判断变量是不是局部的(通过函数内部是否给变量赋值过来判断是否是局部变量) 闭包存在的原因和工作原理(闭包是一种函数,它会保留定义函数时存在的自由变量的绑定,这样调用函数时,虽然定义作用域不可用了,但是仍能使用那些绑定.函数中的函数) nonlocal能解决什么问题(nonlocal是新出现的保留关键字,python3.0中引入)(将局部变量声明为自由变量) 探讨 实现行为良好的装饰器 标准库中有用的装饰器 实现一个参数化的装饰器 装…
装饰器 不得不说,这是对初学者最难以理解的概念了,虽然我学过面向对象,但还是被搞懵逼了..前面还好理解,主要是后面“装饰器的装饰器”我理解不了.装饰器工厂,根据传入的参数不同去返回不同的装饰器,我不得不在网上查了很多资料去弄懂它,如果没搞清楚这个概念,我是没法安安心心往下学的~~ 这里特别要感谢刘志军的这篇文章,完美的解决了我的疑惑: https://zhuanlan.zhihu.com/p/27449649 装饰器可以在不修改源代码,和原调用方式的基础上,给原有函数增加功能.当然,可以增加功能…
闭包(closure)是函数式编程的重要的语法结构. 定义:如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure). def outer(): x = 1 def inner(): print(x) return inner f = outer() f() inner就是内部函数,inner里引用了外部作用域的变量x(x在外部作用域outer里面,不是全局作用域),则这个内部函数inner就是一个闭包. 闭包=函数块+定义函数时的环…
31 装饰器 装饰器可以对一个函数.方法或者类进行加工,是一种高级的python语法. 装饰函数 接收一个可调用对象作为输入参数,并返回一个新的可调用对象. 把函数传递给装饰器,然后增加新的功能,返回一个新的函数重赋值给原函数 语法: def decorator1...  #  定义装饰器 @decorator1        #  定义函数前,@装饰器 def function1        # 定义要加工的函数 例子: def mydecorator(myfunction): def ne…