统一

unification的Python项目详细描述


Build Status

简单的统一,通过调度可扩展。

示例

>>>fromunificationimport*>>>unify(1,1){}>>>unify(1,2)False>>>x=var('x')>>>unify((1,x),(1,2)){~x:2}>>>unify((x,x),(1,2))False@unifiableclassAccount(object):def__init__(self,id,name,balance):self.id=idself.name=nameself.balance=balancedata=[Account(1,'Alice',100),Account(2,'Bob',0),Account(2,'Charlie',0),Account(2,'Denis',400),Account(2,'Edith',500)]id,name,balance=var('id'),var('name'),var('balance')>>>[unify(Account(id,name,balance),acct)foracctindata][{~name:'Alice',~balance:100,~id:1},{~name:'Bob',~balance:0,~id:2},{~name:'Charlie',~balance:0,~id:2},{~name:'Denis',~balance:400,~id:2},{~name:'Edith',~balance:500,~id:2}]>>>[unify(Account(id,name,0),acct)foracctindata][False,{~name:'Bob',~id:2},{~name:'Charlie',~id:2},False,False]

功能调度

统一通过模式匹配支持功能调度。

fromunification.matchimport*n=var('n')@match(0)deffib(n):return0@match(1)deffib(n):return1@match(n)deffib(n):returnfib(n-1)+fib(n-2)>>>map(fib,[0,1,2,3,4,5,6,7,8,0])[0,1,1,2,3,5,8,13,21,34]

这种模式匹配可能相当复杂

name,amount=var('name'),var('amount')@match({'status':200,'data':{'name':name,'credit':amount}})defrespond(name,amount):balance[name]+=amount@match({'status':200,'data':{'name':name,'debit':amount}})defrespond(name,amount):balance[name]-=amount@match({'status':404})defrespond():print("Bad Request")

请参阅examples目录中的完整示例。

性能和可靠性

这是一起被黑的。统一强调可扩展性而不是性能, 初步的基准测试表明,这比基于直接元组的速度慢2-5倍 统一。

这是有点可靠的,唯一的警告是对集合的统一 在这一框架内通常很难做到。它应该很适合 中等复杂的情况,但分解为非常复杂的情况。

历史记录

这是从LogPyMultiple Dispatch项目中提取出来的。

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

推荐PyPI第三方库


热门话题
试图读取字段“java”。lang.反对安卓。util。一对首先   gradle对java的影响。属性作为任务的输入?   java我的return语句不起作用。我做错了什么?   java通用同步代码块[无对象锁定]   macos Java小程序游戏不能在Mac上运行,即使它可以在PC上运行   java Firebase GeoFire设置位置未在服务中工作   java排序字符串对象   java通过JLabel上传背景图像(jpg)后,如何将图像缩放到它所在的面板上?   java无法连接到jsp中的数据库   java如何在整个ant taskdef操作的执行过程中拥有一个singleton类实例   java如何在按键事件中检查JTtextField中的字符串数字验证器   如何最好地输出大型单行XML文件(使用Java/Eclipse)?   内存不足,Java运行时环境无法在Java应用程序中继续运行   java Hibernate连接错误:组织上的NullPointerException。冬眠hql。阿斯特。HqlSqlWalker。createFromJoinElement   linux将参数从shell脚本传递到java类   java对于接受多个参数的setter是否有类似于@JsonCreator的注释?   java在链表中添加节点