Day16 - 1 装饰器

一、高阶函数

1.函数名本身就是一个变量 可以赋值

2.函数名可以作为返回值

def outer():
    x = 5
    def inner():
        print(x)
    return inner

outer()()
def outer():
    x = 5
    def inner():
        print(x)
    return inner

f = outer()
f()
 
 

二、闭包

看第二个例子,f代表的是内部函数inner

在内部函数里面调用了外部的x,而且能找到外部的x

这称为闭包


三、time

import time

start = time.time()

time.sleep(1)

end = time.time()

print(end-start)


time.time()返回的数值是一个时间戳

Unix时间戳(Unix timestamp),或称Unix时间(Unix time)、POSIX时间(POSIX time),是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。

time.sleep()函数是以秒为单位让程序停止运行

四、装饰器:

import time

def out_time(f):
    def inner():
        start = time.time()
        f()
        end = time.time()
        print(end-start)
    return inner

@out_time
def foo():
    time.sleep(1)
    print("foo.....")

foo()

想给程序加个功能,就是输出各个函数的执行时间,一种方法是给每个函数都加上计算机时间的开始和结尾语句,这加上也难,去除也难,而且会有大量重复代码,第二种是用修饰器

如代码  @out_time 等价于 foo = out_time(foo)

五、带有参数的函数的装饰

import time

def out_time(f):
    def inner(*a,**b):
        start = time.time()
        f(*a,**b)
        end = time.time()
        print(end-start)
    return inner

@out_time
def foo(*a,**b):
    time.sleep(1)
    sum = 0
    for i in a:
        sum += i
    print(sum)

foo(1,2)

六、带参数的装饰器

import time


def log(flag):
    def out_time(f):

        def inner(*a,**b):
            start = time.time()
            f(*a,**b)
            end = time.time()
            print(end-start)
            if flag == True:
                print("OK")
        return inner
    return out_time

@log(True)
def foo(*a,**b):
    time.sleep(1)
    sum = 0
    for i in a:
        sum += i
    print(sum)

foo(1,2)



猜你喜欢

转载自blog.csdn.net/qq_36428237/article/details/80323390