一个库,可以创建任意函数的类似构造函数的变体形式。
项目描述
variants是一个库,提供创建函数和其他可调用对象的替代形式的语法糖,就像替代构造函数是提供构造函数函数替代形式的类方法一样。
要创建具有变体的函数,只需用@variants.primary装饰主要形式,然后它将.variant装饰器添加到原始函数中,可用于注册新变体。以下是一个简单的函数示例,该函数打印文本,具有指定要打印的文本来源的变体
import variants
@variants.primary
def print_text(txt):
print(txt)
@print_text.variant('from_file')
def print_text(fobj):
print_text(fobj.read())
@print_text.variant('from_filepath')
def print_text(fpath):
with open(fpath, 'r') as f:
print_text.from_file(f)
@print_text.variant('from_url')
def print_text(url):
import requests
r = requests.get(url)
print_text(r.text)
print_text及其变体可以这样使用
print_text('Hello, world!') # Hello, world!
# Create a text file
with open('hello_world.txt', 'w') as f:
f.write('Hello, world (from file)')
# Print from an open file object
with open('hello_world.txt', 'r') as f:
print_text.from_file(f) # Hello, world (from file)
# Print from the path to a file object
print_text.from_filepath('hello_world.txt') # Hello, world (from file)
# Print from a URL
hw_url = 'https://ganssle.io/files/hello_world.txt'
print_text.from_url(hw_url) # Hello, world! (from url)
与singledispatch的不同之处
虽然variants和singledispatch都旨在提供对主要函数的替代实现,但整体目标略有不同。singledispatch根据参数的类型透明地调度到变体函数,而variants提供函数的显式替代形式。请注意,在上面的示例中,print_text.from_filepath和print_text.from_url都接受一个字符串,一个表示文件路径,另一个表示URL。
此外,variants 与 singledispatch 兼容,因此您可以兼顾两者之优点;以下是一个使用两者的示例
@variants.primary
@singledispatch
def add(x, y):
return x + y
@add.variant('from_list')
@add.register(list)
def add(x, y):
return x + [y]
然后根据类型自动在不同的命名变体之间进行分发
>>> add(1, 2)
3
>>> add([1], 2)
[1, 2]
同时也会暴露显式的变体函数
>>> add.from_list([1], 2)
[1, 2]
>>> add.from_list()
7 @add.register(list)
8 def add(x, y):
----> 9 return x + [y]
TypeError: unsupported operand type(s) for +: 'int' and 'list'
需要注意的是,variants 装饰器必须是外层装饰器。
安装
要安装 variants,请在您的终端运行以下命令
$ pip install variants
要求
这是一个支持 Python 2.7 和 3.4+ 版本的 Python 库。
版本 0.2.0(2018-05-03)
特性
添加了 variants.inspect 模块,它提供了用于检查变体函数组的公共 API。目前提供两个函数:is_primary 和 is_primary_method。(GH #29)
在 setup 中添加了 python_requires,以指示支持的 Python 版本。(GH #34)
错误修复
更新了 MANIFEST.in,以包含 NEWS.rst(GH #34)
改进文档
更新了文档中的永久重定向链接。(GH #28)
在文档中扁平化了更改日志的 TOC 条目。(GH #32)
添加了 API 文档部分,包括 inspect 子模块的文档。(GH #33)
项目详情
下载文件
下载您平台上的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。
源代码分发
构建分发
variants-0.2.0.tar.gz 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 511f75b4cf7483c27e4d86d9accf2b5317267900c166d17636beeed118929b90 |
|
MD5 | 6b5967772affa7838782fc3c97469647 |
|
BLAKE2b-256 | 60de8fe198896ac7d4fb7dddb0b1a1d3ac8bb632a053ffede0d4bc469f2d905a |
variants-0.2.0-py2.py3-none-any.whl 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c1fb0a35dd9d822d371860ba08f9bc3d544772c225e7fc34ae8591a941609a81 |
|
MD5 | 5c9a8b03aa592a9b9fbbbc0c1b133562 |
|
BLAKE2b-256 | 336a28e8d20e2e7406c2a93f43c1c74be972b18a29edd8554dfe5926ea9eb5c0 |