Python关于数学的装饰器

开发 前端
在Python中,装饰器是一种强大的工具,可以用来修改或增强函数或类的行为,而无需修改它们的源代码。

在Python中,装饰器是一种强大的工具,可以用来修改或增强函数或类的行为,而无需修改它们的源代码。虽然装饰器可以应用于各种场景,但设计用于数学运算的装饰器可以特别有趣,能够简化数学运算、执行性能优化、或是提供数学函数的自定义行为。下面是一些与数学相关的装饰器示例:

1. 计算函数执行时间装饰器

这个装饰器用于测量并打印任何数学函数的执行时间,帮助性能分析。

import time
def timing_decorator(func):
    def wrapper(*args, **kwargs):
        start_time = time.time()
        result = func(*args, **kwargs)
        end_time = time.time()
        print(f"{func.__name__} took {end_time - start_time:.4f} seconds")
        return result
    return wrapper
@timing_decorator
def fibonacci(n):
    if n <= 0:
        return 0
    elif n == 1:
        return 1
    else:
        return fibonacci(n-1) + fibonacci(n-2)
fibonacci(10)

2. 自动求导装饰器(简化版)

这个装饰器提供了一个非常简化的示例,用于自动计算一阶导数。注意,对于复杂函数或实际应用,推荐使用如SymPy这样的库。

def derivative_decorator(func):
    def wrapper(x, dx=0.0001):
        return (func(x + dx) - func(x)) / dx
    return wrapper
@derivative_decorator
def square(x):
    return x**2
print(square.derivative(3))  # 计算x=3时square函数的导数近似值

3. 缓存结果装饰器(用于纯函数)

对于那些输入相同的纯数学函数,这个装饰器可以缓存结果,避免重复计算,提高效率。

from functools import lru_cache
@lru_cache(maxsize=None)
def factorial(n):
    if n == 0:
        return 1
    else:
        return n * factorial(n-1)
print(factorial(100))  # 计算大数阶乘,利用缓存避免重复计算

4. 随机噪声装饰器

给数学函数的结果添加随机噪声,模拟测量误差或不确定性。

import random
def add_noise_decorator(std_dev):
    def decorator(func):
        def wrapper(*args, **kwargs):
            result = func(*args, **kwargs)
            return result + random.gauss(0, std_dev)
        return wrapper
    return decorator
@add_noise_decorator(std_dev=0.1)
def sine(x):
    import math
    return math.sin(x)
print(sine(math.pi/2))  # 计算sin(π/2),结果带有随机噪声
责任编辑:华轩 来源: 测试开发学习交流
相关推荐

2016-11-01 09:24:38

Python装饰器

2023-02-07 07:47:52

Python装饰器函数

2010-02-01 17:50:32

Python装饰器

2022-09-19 23:04:08

Python装饰器语言

2021-04-11 08:21:20

Python@property装饰器

2024-09-12 15:32:35

装饰器Python

2022-09-27 11:01:08

Python装饰器

2021-07-27 15:58:12

Python日志代码

2023-12-11 15:51:00

Python装饰器代码

2021-06-01 07:19:58

Python函数装饰器

2022-09-21 09:04:07

Python装饰器

2023-12-13 13:28:16

装饰器模式Python设计模式

2021-10-30 18:59:15

Python

2021-02-01 14:17:53

装饰器外层函数里层函数

2022-10-21 07:50:35

装饰器Python编程

2019-11-25 14:05:47

Python装饰器数据

2024-11-09 08:26:52

Python装饰器

2022-09-26 09:02:54

TS 装饰器TypeScript

2020-05-10 16:59:56

Python装饰器开发

2024-02-26 00:00:00

TypeScript装饰器decorators
点赞
收藏

51CTO技术栈公众号