装饰器

代码的封闭开放原则:
不能对源代码进行修改,可以对代码进行扩展

# -*-coding:utf-8 -*-
__date__ = '2018/2/26'
__author__ = 'xiaojiaxin'
__file_name__ = 'test'

def foo():
    return 1

def fun(f):
    f()
    return f

fun(foo)   #高阶函数执行
print(fun(foo))  # 打印函数地址
print(foo)       # 打印函数地址
# <function foo at 0x000000A2C70AD158>
# <function foo at 0x000000A2C70AD158>
print(foo())     #执行函数,将函数的值打印出来
#1
print(abs)      #函数名也是变量,输入变量名
# <built-in function abs>
# -*-coding:utf-8 -*-
__date__ = '2018/2/26 '
__author__ = 'xiaojiaxin'
__file_name__ = 'decorator'
import time

def show_time(f):

    def inner():
        start_time=time.time()
        time.sleep(1)
        f()
        end_time=time.time()
        print(end_time-start_time)

    return inner

def foo():
    print("foo...")
show_time(foo())#这个是执行foo()函数,foo()函数没有返回值,show_time()没有输入参数
# foo...
show_time(foo)
#无输出
print(show_time(foo))   #打印foo函数所在的内存地址
# <function show_time.<locals>.inner at 0x0000005AA688D268>
foo=show_time(foo)
foo()
# foo...
# 1.0006678104400635

# foo=show_time(foo)
# foo()
@show_time
def bar():
    print("bar...")

bar()
# bar...
# 1.000669240951538
#  @show_time 等价于 bar=showtime(bar) 

大家对内容有任何问题,欢迎留言,定在第一时间解答,谢谢大家!