一个功能强大的 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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6a21de971e76392424cd5254a3db50c5b09feabdd6ce8ebf790185aa19c7f3e9
|
|
| MD5 |
04957176961b0401c9f34299934bf89e
|
|
| BLAKE2b-256 |
c271b1682ae1a6fc90048dadcf97b8f4428fa5443b11abecb4941592dc0490e1
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
31ff46b88494f260ddaab58d037b7bbc320b43fe31e1e538e928b3e5a14b9461
|
|
| MD5 |
8b55e0e0a1e9d04fa578bce565fc50f4
|
|
| BLAKE2b-256 |
d493f2ddae4a807165577859762927db2d6b6ba7f6e7f14cc716c394443a7193
|