标签:修改 原则 外部 ret star %s end 分享图片 ide
装饰器:本质就是函数,功能是为其它函数添加附加功能
装饰器的原则:
装饰器的知识储备:
装饰器 = 高阶函数 + 函数嵌套 + 闭包
高阶函数的定义:
import time def fun1(): time.sleep(0.5) print("hello") def computing_run_time(fun): """ 计算函数运行时间 :param fun: :return: """ start_time = time.time() fun() end_time = time.time() print("运行时间%s" % (end_time - start_time)) computing_run_time(fun1) """ 优点:在不修改函数源代码的前提下,给函数添加了额外的功能 缺点:改变了调用方式 """
import time def fun1(): time.sleep(0.5) print("hello") def computing_run_time(fun): """ 计算函数运行时间 :param fun: :return: """ fun() return fun fun1 = computing_run_time(fun1) fun1() """ 优点:没有改变函数的调用方式 缺点:不能为函数添加新的功能 """
注:仅仅是高阶函数不能满足装饰器的需求
"""
闭包:首先必须是内部定义的函数,该函数包含对外部作用域而不是全局作用域名字的引用
定义:内部函数的代码包含对外部函数的代码的引用,但一定不是对全局作用域的引用
"""
def fun1():
print("fun1")
name = 1
def fun2():
print("fun2")
print(name)
def fun3():
print("fun3")
print(name)
fun3()
fun2()
fun1()
标签:修改 原则 外部 ret star %s end 分享图片 ide
原文地址:https://www.cnblogs.com/fengyuhao/p/8998936.html