各种装饰功能。

cs.deco的Python项目详细描述


最新版本20190830.2: 打一些可靠的getattr电话。

各种装饰功能。

函数缓存(*da,**dkw)

decorator以缓存方法的结果并保留修订 记录更改。

缓存的值存储在实例上(self)。 修订计数器支持修订后的装饰符。

这个装饰器可以在两种模式下使用。 直接:

@cached
def method(self, ...)

或间接地:

@cached(poll_delay=0.25)
def method(self, ...)

可选关键字参数:

  • attr_name:支持属性的基名称。 默认值:方法的名称。
  • 轮询延迟:轮询之间的最短时间;在第一次轮询之后 访问,在轮询延迟过去之前的后续访问 将返回缓存的值。 默认值:,表示无轮询延迟。
  • sig_func:一个签名函数,它应该是 比这种方法便宜。如果签名不变,则 将返回缓存值。签名函数 期望实例(self)作为其第一个参数。 默认值:,表示无签名功能; 第一个计算值将被保留且永不更新。
  • 未设置值:方法之前要返回的值 调用成功。 默认值:

如果该方法引发异常,则将记录该异常并 方法将返回先前缓存的值, 除非还没有缓存值 在这种情况下,将引发异常。

如果签名函数引发异常 然后发出日志消息,签名被视为未更改。

使用这个装饰器的一个例子可能是保持一个"live" 配置数据结构,从配置中分析 程序启动后可能被修改的文件。一 可能会提供一个签名函数,该函数调用 在调用完全读取和 分析文件。

功能decorator(deco)

装饰函数的包装器,以支持可选参数。

实际的decorator函数最终被调用为:

mydeco(func, *da, **dkw)

允许dadkw影响装饰器的行为mydeco

示例:

@decorator
def mydeco(func, *da, kw=None):
  ... decorate func subject to the values of da and kw

@mydeco
def func1(...):
  ...

@mydeco('foo', arg2='bah')
def func2(...):
  ...

功能fmtdoc(func)

用该字符串替换函数的docstring的decorator 根据函数的模块格式化

它支持简单的格式化文档字符串:

ENVVAR_NAME = 'FUNC_DEFAULT'

@fmtdoc
def func():
    """Do something with os.environ[{ENVVAR_NAME}]."""
    print(os.environ[ENVVAR_NAME])

这将提供func此文档字符串:

Do something with os.environ[FUNC_DEFAULT].

警告:此装饰器用于连接"常量" 进入docstring,而不是动态值。用于其他类型 的值应该考虑到恐惧。

函数可观察类(属性名,仅不相等=false)

类装饰器,使各种实例属性可见。

参数:

  • 属性名称: 要设置为 可观察的特性。特殊情况下,单个str可以 只提供一个要观察的属性。
  • 只有不相等的: 仅当新属性值不是 等于上一个proerty值。这需要属性 不平等的可比值。 默认值:false,表示将报告所有更新。

功能strable(*da,**dkw)

可接受str 而不是他们的核心类型。

参数:

  • 函数:要修饰的函数
  • 打开函数:用于生成核心类型的"打开"工厂 如果提供了字符串; 默认值是内置的"打开"功能

通常(默认)的例子是处理 打开文件,设计为可递一个文件对象,但是它可以 用文件名调用。如果第一个参数是astr 然后打开该文件并用 打开文件。

示例:

@strable
def count_lines(f):
  return len(line for line in f)

class Recording:
  "Class representing a video recording."
  ...
@strable(open_func=Recording)
def process_video(r):
  ... do stuff with `r` as a Recording instance ...

发布日志

版本20190830.2: 打一些可靠的getattr电话。

发布日期20190830.1: @decorator:设置包装的模块。

发布日期20190830: @decorator:从修饰的目标aids cs.distinf设置包装的模块

发布日期20190729: @缓存:侧步未初始化值。

发布日期20190601.1: @strable:修复docstring中的示例。

发布日期20190601: bugfix@decorator以正确传播子decorator的docstring。 改进其他文档字符串。

发布日期20190526: @decorator:添加对位置参数的支持并重写-更简单、更清晰。

发布日期20190512: @fmtdoc:请注意不要误用此装饰器。

发布日期20190404: 新的@fmtdoc decorator,根据模块的全局设置函数的doctsring格式。

发布日期20190403: @缓存:错误修复:避免在第一次传递时使用unset sig_func值。 @可观察类:进一步调整。

发布日期20190322.1: @可观察类:bugfixinit包装函数。

发布日期20190322: 新类decorator@observate_class。 "警告"的错误修复导入

发布日期20190309: @缓存:改进异常处理。

发布日期20190307.2: 修复docstring错误。

发布日期20190307.1: bugfix@decorator:装饰装修的最后一步。

发布日期20190307: @decorator:删除未使用的参数,它们将被返回的decorator使用。 重新设计@cached逻辑。

发布日期20190220: bugfix@decorator decorator,不要装饰两次。 继承修饰过的函数的docstring有一个切入点。

发布日期20181227: 新decortor@strable for函数,它可以接受str而不是其主类型。 对@cached的改进。

发布日期20171231: 初始PYPI版本。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java无法使用JSF访问托管bean方法   java是制作具有多值类型的HashMap的正确方法   javafx中TicTacToe的java更新UI   windows Java文件。getCanonicalFile()无法处理冒号“:”   java在一个布局屏幕中创建多个(26)按钮   java Android Studio:Gradle构建完成,有251个错误   我们如何在Java上为callfireapiclient编写单元/集成测试?   java无法将1715UTC转换为本地/gmt类型   具有已定义的数字序列的JAVA循环   Java程序正在netbeans中编译,但未在CMD中编译,包不存在   java Android构造函数和onCreate()之间有什么区别?   java配置弹性搜索结果评分   java LibGDX纹理是否可绘制?   java如何在Android中设置应用程序默认打开pdf   java是否有一种创造性的方法将多个参数传递给contentEquals()方法?   java在Android上存储Ed25519私钥