python装饰器(利用简单代码解释)

目录

定义

质数判断例子

使用装饰器,将时间逻辑和计数逻辑分开:

 记录1至10000质数总数:

eg:1~5000中的质数,计数范围可变


定义

装饰器是Python编程语言中一种强大的函数工具,用于修改其他函数的功能。它们允许在不修改被装饰函数源代码的情况下,通过添加额外的代码来包装、扩展或改变函数的行为。

装饰器是一个函数,它接受一个函数作为输入,并返回一个新的函数作为输出。这个新的函数通常在原始函数执行前后执行额外的操作,例如修改函数的参数、修改返回值、记录日志、执行计时等。通过装饰器,可以轻松地在代码中实现这些横切关注点(cross-cutting concerns)。

装饰器可以使用@符号放在函数定义的上方,从而自动应用于该函数。当调用被装饰的函数时,实际上是调用了装饰器返回的新函数。

下面通过一个简单例子来说明:


质数判断例子

# -*- coding:utf-8 -*-
import time


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


def prime_nums():   #打印出1至10000之间的质数,并记录打印所需时间
    t1 = time.time()
    for i in range(2, 10000):
        if is_prime(i):
            print(i)
    t2 = time.time()
    print(t2-t1)


prime_nums()

运行结果:


使用装饰器,将时间逻辑和计数逻辑分开:

# -*- coding:utf-8 -*-
import time


def display_time(func):    #时间逻辑
    def wrapper():
        t1 = time.time()
        func()
        t2 = time.time()
        print(t1-t1)
    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时,会先调用display_time
def prime_nums():   #打印出1至10000之间的质数,计数逻辑
    for i in range(2, 10000):
        if is_prime(i):
            print(i)


prime_nums()

运行结果:


 记录1至10000质数总数:

# -*- coding:utf-8 -*-
import time


def display_time(func):    #时间逻辑
    def wrapper():
        t1 = time.time()
        result = func()
        t2 = time.time()
        print("Total time:{:.4}s".format(t2 - t1))
        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
def count_prime_nums():   #打印出1至10000之间的质数个数
    count = 0
    for i in range(2, 10000):
        if is_prime(i):
            count = count+1
    return count


number = count_prime_nums()
print(number)

 运行结果:


 可调整参数代码修改

eg:1~5000中的质数,计数范围可变
 

# -*- coding:utf-8 -*-
import time


def display_time(func):
    def wrapper(*args):
        t1 = time.time()
        result = func(*args)
        t2 = time.time()
        print("Total time:{:.4}s".format(t2 - t1))
        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
def count_prime_nums(maxnum):   
    count = 0
    for i in range(2, maxnum):
        if is_prime(i):
            count = count+1
    return count


number = count_prime_nums(5000)
print(number)

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jerry_ww

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值