Skip to main content

一个功能强大的 Python 装饰器工具包 | A powerful Python decorator toolkit

Project description

FunKit - 功能强大的装饰器工具包

简介

FunKit 是一个Python装饰器工具包,提供了多种实用的装饰器,包括定时器、线程管理、耗时统计、异常处理、调用限制、失败重试、缓存和速率限制等功能。这些装饰器可以帮助开发者更方便地实现复杂的功能,提高代码的可读性和可维护性。

安装

你可以通过以下命令安装 FunKit

pip install FunKit

使用方法

1. 单次定时器 (setTimeout)

setTimeout 装饰器用于在指定的延迟时间后执行函数。

参数

  • sleep:延迟时间(秒),必须为非负数。

返回值: 返回一个 _ThreadController 对象,该对象提供以下方法和属性:

  • stop():停止定时器。
  • isRun():检查定时器是否在运行。
  • value:获取定时器执行结果。

示例代码

from FunKit import setTimeout

@setTimeout(sleep=2)
def my_function():
    print("这是延迟2秒后执行的函数。")

controller = my_function()
# 如果你想停止定时器,可以调用 controller.stop()

2. 循环定时器 (setInterval)

setInterval 装饰器用于按指定的时间间隔循环执行函数。

参数

  • interval:执行间隔(秒),必须为非负数。
  • end:最大持续时间(秒),0 表示无限,必须为非负数。

返回值: 返回一个 _ThreadController 对象,该对象提供以下方法和属性:

  • stop():停止定时器。
  • isRun():检查定时器是否在运行。
  • value:获取定时器执行结果,结果存储在列表中。

示例代码

from FunKit import setInterval

@setInterval(interval=1, end=5)
def my_function():
    print("这是每秒执行一次,持续5秒的函数。")

controller = my_function()
# 如果你想提前停止定时器,可以调用 controller.stop()

3. 创建多线程 (createThread)

createThread 装饰器用于将函数封装成线程执行。

参数

  • inherit:是否要随着主线程结束而结束,默认为 False

返回值: 返回一个 _ThreadController 对象,该对象提供以下方法和属性:

  • isRun():检查线程是否在运行。
  • value:获取线程执行结果。

示例代码

from FunKit import createThread

@createThread(inherit=True)
def my_function():
    print("这是在新线程中执行的函数。")

controller = my_function()

4. 耗时计算 (timeIt)

timeIt 装饰器用于统计函数的执行耗时。

参数

  • num:执行次数,默认为 1。
  • show:是否直接打印耗时信息,默认为 True
  • info:是否返回耗时信息,默认为 False

返回值: 返回一个元组 (原函数返回值, 耗时信息)原函数返回值,其中耗时信息是一个字典,包含平均耗时、最小耗时、最大耗时、总耗时等信息。

示例代码

from FunKit import timeIt

@timeIt(num=3)
def my_function():
    # 模拟耗时操作
    import time
    time.sleep(1)
    return "函数执行完成"

result, elapsed = my_function()
print(f"函数返回值: {result}")
print(f"耗时信息: {elapsed}")

5. 异常处理 (catch)

catch 装饰器用于捕获函数执行过程中的异常。

参数

  • exc:要捕获的异常类型,默认为 Exception
  • value:异常发生时返回的默认值,默认为 None
  • reRaise:是否重新抛出异常,默认为 False
  • show:是否显示错误信息,默认为 True

返回值: 返回一个元组 (默认值, 异常对象)

示例代码

from FunKit import catch

@catch(exc=ZeroDivisionError, value="发生除零错误")
def my_function():
    return 1 / 0

result, error = my_function()
print(f"结果: {result}")
print(f"异常对象: {error}")

6. 全局异常捕获 (catchAll)

catchAll 装饰器用于对指定模块中的所有用户定义函数进行全局异常捕获。

参数

  • name:需要处理的模块名称。
  • exc:要捕获的异常类型,默认为 Exception
  • value:异常发生时返回的默认值,默认为 None
  • reRaise:是否重新抛出异常,默认为 False
  • show:是否显示错误信息,默认为 True

返回值: 返回一个元组 (默认值, 异常对象)

示例代码

import FunKit
from FunKit import catchAll

def my_function():
    return 1 / 0

catchAll(name=__name__)
try:
    result = my_function()
except Exception as e:
    print(f"捕获到异常: {e}")

7. 调用限制 (callLimit)

callLimit 装饰器用于限制函数的调用次数。

参数

  • num:最大允许调用次数,默认为 1。
  • value:超限后返回值,默认为 None

返回值: 返回默认值或目标函数返回值。

示例代码

from FunKit import callLimit

@callLimit(num=2, value="调用次数已超限")
def my_function():
    return "函数正常执行"

print(my_function())
print(my_function())
print(my_function())

8. 失败重试 (retry)

retry 装饰器用于在函数执行失败时进行重试。

参数

  • num:最大尝试次数,默认为 3。
  • delay:重试延迟时间(秒),默认为 0。
  • exc:要捕获的异常类型,默认为 Exception
  • show:是否显示错误信息,默认为 True

返回值: 返回目标函数返回值或异常对象。

示例代码

from FunKit import retry

@retry(num=3, delay=1)
def my_function():
    import random
    if random.random() < 0.5:
        raise ValueError("模拟错误")
    return "函数执行成功"

result = my_function()
print(f"结果: {result}")

9. 缓存装饰器 (memoize)

memoize 装饰器用于缓存函数的执行结果,避免重复计算。

参数

  • num:最大缓存条目数(LRU 淘汰),默认为 128。
  • ttl:缓存有效期(秒),0 表示永久,默认为 0。

返回值: 返回目标函数返回值。

示例代码

from FunKit import memoize

@memoize(num=2, ttl=2)
def my_function(x):
    import time
    time.sleep(1)
    return x * 2

print(my_function(2))  # 第一次调用,会进行计算
print(my_function(2))  # 第二次调用,会使用缓存结果

10. 速率限制装饰器 (rateLimit)

rateLimit 装饰器用于限制函数在指定时间周期内的调用次数。

参数

  • num:周期内最大调用次数,默认为 1。
  • period:时间周期(秒),默认为 1。
  • value:超限后返回值,默认为 None

返回值: 返回速率限制控制器对象。

示例代码

from FunKit import rateLimit

@rateLimit(num=2, period=1, value="调用速率已超限")
def my_function():
    return "函数正常执行"

print(my_function())
print(my_function())
print(my_function())

11. 性能分析装饰器 (analyse)

analyse 装饰器用于分析函数的执行性能,包括 CPU 和内存使用情况。

参数

  • sampling:采样率,默认为 0.1。
  • cpuSampling:CPU 采样率,默认为 0.1。
  • show:是否直接打印分析结果,默认为 True
  • info:是否返回统计信息,默认为 False

返回值: 返回一个元组(原函数返回值, 统计信息)原函数返回值,统计信息包含 CPU 和内存使用情况的分析结果和函数执行结果。

示例代码

from FunKit import analyse

@analyse(sampling=0.1, cpuSampling=0.1)
def intensiveFunction() -> int:
    import time
    result = 0
    for i in range(10000000):
        result += i * i
    time.sleep(1)  # 为了更好地观察内存变化
    return result
    
result = intensiveFunction()
print(f"\n函数返回结果: {result}")

贡献

如果你发现了 bug 或者有新的功能需求,欢迎联系QQ邮箱:2449579731@qq.com

许可证

本项目采用 MIT 许可证

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

funkit-0.0.3.tar.gz (10.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

funkit-0.0.3-py3-none-any.whl (10.3 kB view details)

Uploaded Python 3

File details

Details for the file funkit-0.0.3.tar.gz.

File metadata

  • Download URL: funkit-0.0.3.tar.gz
  • Upload date:
  • Size: 10.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for funkit-0.0.3.tar.gz
Algorithm Hash digest
SHA256 6a21de971e76392424cd5254a3db50c5b09feabdd6ce8ebf790185aa19c7f3e9
MD5 04957176961b0401c9f34299934bf89e
BLAKE2b-256 c271b1682ae1a6fc90048dadcf97b8f4428fa5443b11abecb4941592dc0490e1

See more details on using hashes here.

File details

Details for the file funkit-0.0.3-py3-none-any.whl.

File metadata

  • Download URL: funkit-0.0.3-py3-none-any.whl
  • Upload date:
  • Size: 10.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for funkit-0.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 31ff46b88494f260ddaab58d037b7bbc320b43fe31e1e538e928b3e5a14b9461
MD5 8b55e0e0a1e9d04fa578bce565fc50f4
BLAKE2b-256 d493f2ddae4a807165577859762927db2d6b6ba7f6e7f14cc716c394443a7193

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page