python的纯效果

effect的Python项目详细描述


效果

https://travis-ci.org/python-effect/effect.svg?branch=masterhttps://img.shields.io/pypi/v/effect.svg

effect是一个库,通过隔离 代码中的效果(即IO或状态操作)。文件是 可在https://effect.readthedocs.org/找到,其pypi页面是 https://pypi.python.org/pypi/effect

python 2.7、3.4和3.5以及pypy。

您可以通过运行pip install effect来安装它。

https://radix.github.io/effect/sigh-defects.png

这是什么?

effect允许隔离io和状态操作代码。

这样做的好处很多:首先,大部分代码可以 纯粹的功能性,使测试更容易,并且能够对 行为。另外,因为它将效果的规范与 性能的效果,还有两个好处:测试变得更容易 不过,提供其他效果实现也很容易。

效果有点类似于“代数效果”,在 类型化函数式编程语言。它和Twisted的也有相似之处 延迟对象。

示例

一个使用效果的快速示例:

from__future__importprint_functionfromeffectimportsync_perform,sync_performer,Effect,TypeDispatcherclassReadLine(object):def__init__(self,prompt):self.prompt=promptdefget_user_name():returnEffect(ReadLine("Enter a candy> "))@sync_performerdefperform_read_line(dispatcher,readline):returnraw_input(readline.prompt)defmain():effect=get_user_name()effect=effect.on(success=lambdaresult:print("I like {} too!".format(result)),error=lambdae:print("sorry, there was an error. {}".format(e)))dispatcher=TypeDispatcher({ReadLine:perform_read_line})sync_perform(dispatcher,effect)if__name__=='__main__':main()

Effect接受我们所称的intent,它是任何对象。这个 dispatcher参数到sync_perform必须有一个performer函数 为了你的意图。

这有很多优点。首先,对^{tt7}进行单元测试$ 变得更简单。您不需要模拟或参数化raw_input 函数-只需调用get_user_name,并断言它返回一个readline 具有正确“prompt”值的对象。

第二,你可以用很多不同的方法实现readline 可以重写执行意图的方式,以执行您想要的任何操作。

有关如何实现实际效果执行代码的更多信息, 以及其他详细信息,请参见documentation。还有一个完整的例子 与用户交互并使用http客户端与github对话 effect-examples存储库中的api。

视频

已经就效果进行了一些会谈。

谢谢

感谢Rackspace允许我参与这个项目,并且 优秀的open source employee contribution policy

作者

效果最初是由Christopher Armstrong, 但现在有以下人员的贡献:

IRC

irc.freenode.net上有一个#python-effectirc频道。

另请参见

要将效果与twisted的延迟进行集成,请参见txEffect包 (pypigithub)。

在过去的几年里,图书馆的生态系统 用python编程已经爆炸了。以下是我推荐的一些库:

  • pyrsistent-python中的持久(优化的不可变)数据结构
  • toolz-纯fp函数的通用库
  • fn.py-一组受scala启发的工具,包括奇怪的lambda语法、选项类型和monad

许可证

效果是根据麻省理工学院的许可证获得的:

版权所有(c)2014 Christopher Armstrong

兹免费准许任何人取得 本软件和相关文档文件(“软件”),用于处理 不受限制的软件,包括但不限于 使用、复制、修改、合并、发布、分发、再授权和/或出售 软件,并允许向其提供软件的人员这样做, 必须满足以下条件:

上述版权公告及本许可公告须包括在 软件的拷贝或大部分。

本软件按“原样”提供,无任何形式的保证,明示或 隐含的,包括NG但不限于适销性、适用性保证 为了特定的目的和不受侵犯。在任何情况下,作者或 版权持有人应对任何索赔、损害或其他责任负责,无论 在诉讼或合同中,侵权行为或其他方式,由 与软件的连接或软件的使用或其他交易

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

推荐PyPI第三方库


热门话题
与ReentrantLock相比,java ReentrantReadWriteLock的性能非常差   java如何使用Maven Android Studio正确导入?   安卓将ADB添加到我的Java PC应用程序   反射Java getDeclaredConstructor失败,来自JUnit的NoSuchMethodException   JSP上siteedit标记库的java替代   JavaSpring环境概要文件和JPA   java中是否有一个类似于StringBuilder的类,唯一的区别是它具有固定的长度?   JavaMathContext。小数点32 vs MathContext。小数点64,使用哪一个,为什么?   java使用spring在Ibm Websphere MQ中实现重试逻辑   java调用SpriteBatch。开始()和结束()   java有一种从文本中读取文本的方法。文件,并将其设置为pom中的maven属性。xml专家?   java让sitemesh使用struts2   Java Swing:在现有窗口上定位对话框   使用带有MemSql的JPA本机查询的java Select json列