栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python----装饰器

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python----装饰器

一、闭包函数

定义:

1.函数是一个内部函数

2.内部函数使用了外部的一个变量(非全局变量)

def outer():
    x=10
    def inner():     # 内部函数
        print(x+10)  #内部函数使用了外部函数的一个变量,所以inner就是闭包函数
    return inner()

outer()

二、装饰器

作用:在不改变原函数的基础上,给原函数加功能

调用方式: @装饰器名

1.简单装饰器
def anaything(n):
    def inner():     # 装饰器首先是一个闭包函数
        n()
        print('13')  # 在这里,装饰器的作用是打印13
    return inner()

@anaything       # anaything(a)
def a():
    print('aaa')

# 输出:  aaa
#         13

在这里,@anaything 就相当于anaything(a),两者是相同的

2.   带参数的装饰器
import time

def count_time(func):
    def inner(a,b):
        start_time = time.time()
        func(a, b)
        end_time = time.time()
        print('总共用时 %s' % (end_time - start_time))
    return inner

@count_time
def add(a,b):
    print(a * b)
    time.sleep(2)

add(5,8)
# 输出: 40
#       总共用时 2.0055623054504395

3.多层装饰器
import time

def show_time(func):   # 计算程序执行时间
    def inner(a,b):
        start_time = time.time()
        time.sleep(2)
        func(a,b)
        end_time = time.time()
        print('花费了 %s' % (end_time - start_time))
    return inner

def count(func):    # 用来打印3333
    def inner(a,b):
        print('3333')
        func(a,b)
    return inner

@show_time
@count
def add(a,b):
    print(a * b)
    time.sleep(2)

add(3,5)
# 输出: 3333
#        15
#        花费了 4.010709047317505

注:在程序执行过程当中,没有顺序,同时进行

4.类装饰器
import time

class show_time():
    def __init__(self,func):   # __init__,面向对象中初始化方法
        self.func = func

    def __call__(self,a,b):    # __call__,面向对象中可调用方法
        start_time = time.time()
        self.func(a,b)
        time.sleep(2)
        end_time = time.time()
        print('总计用时: %s' % (end_time - start_time))

@show_time
def add(a,b):
    time.sleep(2)
    print(a * b)

add(5,8)
# 输出: 40
#        总计用时: 4.008551359176636

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/650305.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号