跳转到主要内容

一个库,用于在运行时通过名称动态确定参数来调用Python函数。

项目描述

概述

calllib提供了3个函数,分别是applygetargsinspect_params。这些函数用于检查和调用参数在事先未知但运行时由可用的对象映射确定的Python函数。

这在插件框架中特别有用,您不需要每个回调函数都具有相同的签名。相反,每个函数可以接受可用的参数子集。

例如

>>> from __future__ import print_function
>>> import calllib

>>> def callback1(time):
...    print('callback1 called at:', time)

>>> def callback2(time, reason):
...    print('callback2 called at:', time, 'reason:', reason)

# register the callbacks
>>> callbacks = [callback1, callback2]

# elsewhere: compute the total universe of possible
#  callback arguments
>>> args = {'time': 'noon', 'reason': 'abort'}
>>> for callback in callbacks:
...    calllib.apply(callback, args)  # execute each callback
callback1 called at: noon
callback2 called at: noon reason: abort

最后一行显示,只要其参数是可用的参数子集,就可以调用任何回调例程,而无需知道其确切的参数。

apply()

apply(callable, args)

  • callable - 可以用 inspect 模块检查的任何可调用对象。

  • args - 一个映射对象,通常是一个 dict,包含将传递给 callable 的可用参数。

callablegetargs 进行检查,并按名称提取其参数。对于每个参数,从 args 中按名称检索相应的值,并将其传递给可调用对象。

apply 返回以计算出的参数执行 callable 的结果。

getargs()

getargs(callable, args)

  • callable - 可以用 inspect 模块检查的任何可调用对象。

  • args - 一个映射对象,通常是一个 dict,包含可以传递给 callable 的可用参数。

对可调用对象进行检查,以确定其参数。对于每个参数,都会从 args 中检索相应的值。如果在 args 中找不到参数,则 callable 为该参数提供默认值,并检索默认值。

getargs 返回一个实际参数值的列表,这些值将被传递给 callable

inspect_params()

inspect_params(callable)

  • callable - 可以用 inspect 模块检查的任何可调用对象。

检查 callable 以确定其参数和默认值(如果有)。inspect_params 返回一个包含参数名称列表和包含默认值的字典的元组,如果有默认值。例如

>>> def foo(x, y=0, z=6): pass
...
>>> calllib.inspect_params(foo)
(['x', 'y', 'z'], {'y': 0, 'z': 6})

>>> class Baz(object):
...     def __init__(self, x, y='hello'): pass
...
>>> calllib.inspect_params(Baz)
(['x', 'y'], {'y': 'hello'})

支持的可调用类型

calllib 支持用 Python 编写的任何可调用对象。这包括函数、绑定和未绑定方法、类以及具有 __call__ 成员的对象实例。

由于它们不能被 inspect 模块反查,因此内置的 Python 函数(如 len)不能与 apply 一起使用。

默认参数

带有默认参数的函数完全由 calllib 支持。如果未在 applyargs 参数中指定参数并且有默认值,则将使用默认值。

测试

要测试,请运行 'python setup.py test'。在 python >= 3.0 时,这也将运行 doctests。

变更日志

1.8 2016-10-27 Eric V. Smith

  • 删除更改 RPM 名称的漏洞(问题 #7)。

  • 始终要求 setuptools(问题 #6)。

  • 没有代码更改。

1.7 2015-05-16 Eric V. Smith

  • 删除了 'test' 包,因此它不会通过 bdist_* 安装。它仍然包含在 sdists 中。

  • 没有代码更改。

1.6 2015-05-15 Eric V. Smith

  • 将 RPM 名称更改为 python3-calllib,如果使用 python 3 运行。

  • 没有代码更改。

1.5 2014-12-07 Eric V. Smith

  • 添加了 inspect_params(问题 #5)。

1.4 2014-07-24 Eric V. Smith

  • 发布版本 1.4。没有代码更改。

  • 在 README.txt 中添加关于运行测试套件的条目。

  • 修复 sdist 中的缺失 test/__init__.py。

1.3 2014-03-14 Eric V. Smith

  • 将 MANIFEST.in 添加到 MANIFEST.in,以便它包含在 sdists 中(问题 #4)。

1.2 2014-02-12 Eric V. Smith

  • 新版本只是为了更新开发状态分类器。

1.1 2014-02-12 Eric V. Smith

  • 生成名为 python-calllib 的 RPM(问题 #3)。

  • 支持 python3(问题 #2)。

  • 将测试移动到单独的模块中(问题 #1)。

1.0 2011-11-10 Eric V. Smith

  • 最终确定 API。

  • 添加了对派生类的测试。

0.2 2011-11-10 Eric V. Smith

  • 允许没有 __init__ 方法的类。

  • 标准化测试名称。

0.1 2011-11-09 Eric V. Smith

  • 初始发布。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源分布

calllib-1.8.tar.gz (12.2 kB 查看散列)

构建分布

calllib-1.8-py2.py3-none-any.whl (7.7 kB 查看哈希值)

上传时间: Python 2 Python 3

由以下支持