纯效果用于Python
项目描述
Effect
Effect 是一个库,帮助您通过隔离代码中的效果(即IO或状态操作)来编写纯函数式代码。文档可在 https://effect.readthedocs.org/ 找到,其 PyPI 页面为 https://pypi.python.org/pypi/effect。
它 支持 3.6 及以上版本。
您可以通过运行 pip install effect 来安装它。
这是什么?
Effect 允许您隔离您的IO和状态操作代码。
这样做的好处有很多:首先,您的大多数代码可以成为纯函数式代码,这有助于测试并能够推理行为。此外,因为它将效果的定义与效果的执行分离,还有两个额外的好处:测试变得更加容易,并且可以轻松提供效果的替代实现。
Effect 在某种程度上类似于在各类类型化函数式编程语言中实现的“代数效果”。它也类似于 Twisted 的 Deferred 对象。
示例
使用 Effects 的一个非常简单的示例
from effect import sync_perform, sync_performer, Effect, TypeDispatcher
class ReadLine(object):
def __init__(self, prompt):
self.prompt = prompt
def get_user_name():
return Effect(ReadLine("Enter a candy> "))
@sync_performer
def perform_read_line(dispatcher, readline):
return raw_input(readline.prompt)
def main():
effect = get_user_name()
effect = effect.on(
success=lambda result: print("I like {} too!".format(result)),
error=lambda e: print("sorry, there was an error. {}".format(e)))
dispatcher = TypeDispatcher({ReadLine: perform_read_line})
sync_perform(dispatcher, effect)
if __name__ == '__main__':
main()
Effect 接收我们所说的 intent(意图),这是任何对象。在 sync_perform 的 dispatcher 参数中必须为您的意图提供一个 performer 函数。
这有几个优点。首先,您的 get_user_name 的单元测试变得更加简单。您不需要模拟或参数化 raw_input 函数 - 您只需调用 get_user_name 并断言它返回一个带有正确 'prompt' 值的 ReadLine 对象。
其次,您可以通过多种方式实现 ReadLine - 您可以覆盖意图的执行方式来执行任何您想要的操作。
有关如何实现实际效果执行代码以及其他细节的更多信息,请参阅文档。在effect-examples仓库中还有一个与用户交互和使用HTTP客户端与GitHub API通信的完整示例。
视频
关于Effect已经有一些演讲了。
副作用是一个公共API,由Chris Armstrong在Strange Loop(2015-09-26)发表
使用Effect进行Python的Functionalish编程,由Robert Collins在Kiwi PyCon(2015-09-05)发表
感谢
感谢Rackspace允许我参与这个项目,并拥有一个优秀的开源贡献政策
IRC
在irc.freenode.net上有#python-effect的IRC频道。
参见
有关将Effect与Twisted的Deferreds集成的信息,请参阅txEffect包(pypi,github)。
在过去几年中,Python中用于函数式编程的库生态系统爆炸式增长。以下是我推荐的一些库
pyrsistent - Python中的持久(优化不变)数据结构
toolz - 一个纯FP函数的通用库
fn.py - 受Scala启发的工具集,包括奇特的lambda语法、选项类型和monads
许可证
Effect遵循MIT许可证
版权(C)2014 Christopher Armstrong
特此授予任何人免费获得此软件及其相关文档文件(“软件”)副本的权利,以无限制地处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本,并允许向软件提供者提供软件的人这样做,前提是遵守以下条件
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、适用于特定目的和不侵犯版权。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论此类责任是基于合同、侵权或其他方式,以及与软件或软件的使用或其他交易有关。
项目详情
下载文件
下载适合您平台的文件。如果您不确定该选择哪个,请了解有关安装包的更多信息。
源代码分发
构建分发
effect-1.1.0.tar.gz的散列值
算法 | 散列值 | |
---|---|---|
SHA256 | 7affb603707c648b07b11781ebb793a4b9aee8acf1ac5764c3ed2112adf0c9ea |
|
MD5 | 87a4408b01acfa6ba51d6b5c5b6b1d11 |
|
BLAKE2b-256 | 317a3c7a4568ed3a8fa463ffabbc70ed9471d82daad4e479b305d299bec72b49 |
effect-1.1.0-py2.py3-none-any.whl的散列值
算法 | 散列值 | |
---|---|---|
SHA256 | 01ad6456b806819f9a2aa092c11321f89113028197f2e85170556f8fb87c0f4b |
|
MD5 | df2ad530b6f0b7a95eb4dafd022b404e |
|
BLAKE2b-256 | 5696d1b0c7366a6b3a94ea122f81e381437f769f77672acbe1f71d0a6bdeb7f9 |