ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python中装饰器用法

2022-06-11 00:31:26  阅读:139  来源: 互联网

标签:count 闭包 return 函数 python 用法 time 装饰


1 装饰器目的

  • 装饰器本质也是函数
  • 比如对函数运行时间统计,可以用一个装饰器函数实现,就不用对每个需要统计时间的函数,都写一遍时间统计的语句了
  • 或者是不修改原来的函数,进行函数重构

2 一个统计函数运行时间的装饰器

import time

def is_prime(num):
    #判断单个数是否为质数
    if num < 2:
        return False
    elif num == 2:
        return True
    else:
        for i in range(2, int(num / 2) + 1):
            if num % i == 0:
                return False
        return True

def cal_time(func):
    def wrapper(*args):
    # 重点关注*args代表不知道多少个参数,参数个数和原函数一致
        start_time = time.time()
        result = func(*args)
        end_time = time.time()
        print('Total time {:.4}'.format(end_time - start_time))
        return result
    return wrapper

@cal_time
def count_prime_nums(maxnum):
    count = 0
    for i in range(2, maxnum):
        if is_prime(i):
            count += 1
    return count


if __name__ == '__main__':
    print(is_prime(4))
    count = count_prime_nums(10000)
    print(count)

  • 注意被装饰的函数,有入参,有返回值时,装饰器函数的写法
  • return wrapper,装饰器函数中返回的是内层函数名,type为<class 'function'>

3 装饰器与闭包。

  • 装饰器是闭包的一种。闭包和装饰器的区别:闭包传递的是变量,而装饰器传递的是函数,除此之外没有任何区别,或者说装饰器是闭包的一种,它只是传递函数的闭包。

  • 创建一个闭包需要满足以下几点:

    • 必须有一个内嵌函数
    • 内嵌函数必须引用外部函数中的变量
    • 外部函数的返回值必须是内嵌函数
    def out(N):
      def inner(M):
          return N * M
      return inner
        
    

标签:count,闭包,return,函数,python,用法,time,装饰
来源: https://www.cnblogs.com/ua-21/p/16365063.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有