Python-装饰器

装饰器在我初次接触的时候,还是花了时间理解的

我将用大白话,和个人理解来进行复盘

意义:

        简单来说装饰器的作用就是在不改变函数本身的功能和调用方式的情况下添加新的功能.

        如F1()是准备要装装饰器的函数,装饰器就是在F1()的基础上加画❀

        再简单点说 就是给F1穿上衣服 而装饰器就是衣服

具体:

        1、定义成装饰器函数,函数的参数的作用是为了接收需要被装饰的函数的名字。

        2、在定义被装饰的函数时, 开头写上@装饰器名

例子:

        被装饰函数作用:计算0-num内所有质数和

#判断是否为质数的函数
def is_prime(num):
    if num<2:
        return false
    elif num==2:
        return ture
    else:
        for i in range(2,num):
            if num % i == 0:
                return false            #return可以立刻结束函数 所以不需要break跳出循环
        return ture
       


#主函数
def prime_nums(num):
    count = 0
    for i in range(2, num):
        if is_prime(i):
            count = count + i
    return count

        装饰器的作用:给目标函数添加可以计算运行时间的功能

        *arg**kwarg就是可以接受任何类型、任何长度的参数的意思

import time

#装饰器函数
def display_time(func):                       #func就是人(被装饰的函数)的名字
    def wrapper(*args, **kwargs):             #wrapper就是衣服(装饰器函数)
        t1 = t1.time()                             
        result = func(*args, **kwargs)        #人有返回值就用变量接收 然后在衣服里返回这个变量 
        t2 = t2.time()
        print(t2-t1)
        print(func.__name__)                  #打印func的name属性 就是看人的名字
        return result                         #如果人有返回值 那么就需要在衣服里再返回一次
    return wrapper                            #返回这个已经编织好的衣服名字

运行:

import time
def display_time(func):
    def wrapper(*args, **kwargs):       
        t1 = time.time()
        result = func(*args, **kwargs)
        t2 = time.time()
        print(t2 - t1)
        print(func.__name__) 
        return result        
    return wrapper #这里不能加()



def is_prime(num):
    if num < 2:
        return False
    elif num == 2:
        return True
    else:
        for i in range(2, num):
            if num % i == 0:
                return False
        return True



@display_time                       #调用装饰器 给prime_nums穿上衣服
def prime_nums(num):
    count = 0
    for i in range(2, num):
        if is_prime(i):
            count = count + 1
    return count

count = prime_nums(10000)
print(count)

结果:

0.3351273536682129
prime_nums
1229

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值