使用tuplelike对象的Python Sexpression仿真。

etuples的Python项目详细描述


etuples

Build StatusCoverage StatusPyPI

PythonS-expression模拟使用类似元组的对象。在

示例

etuples类似于元组:

>>>fromoperatorimportadd>>>frometuplesimportetuple,etuplize>>>et=etuple(add,1,2)>>>etExpressionTuple((<built-infunctionadd>,1,2))>>>fromIPython.lib.prettyimportpprint>>>pprint(et)e(<function_operator.add(a,b,/)>,1,2)>>>et[0:2]ExpressionTuple((<built-infunctionadd>,1))

etuples也可以计算:

^{pr2}$

计算的etuple被缓存:

>>>et=etuple(add,"a","b")>>>et.eval_obj'ab'>>>et.eval_objiset.eval_objTrue

重构的etuple及其求值结果跨元组操作保存:

>>>et_new=(et[0],)+et[1:]>>>et_newisetTrue>>>et_new.eval_objiset.eval_objTrue

ratorrands和{}将返回运算符、操作数,并将该操作应用于操作数:

>>>frometuplesimportrator,rands,apply>>>et=etuple(add,1,2)>>>rator(et)<built-infunctionadd>>>>rands(et)ExpressionTuple((1,2))>>>apply(rator(et),rands(et))3

ratorrands^{}函数,可以扩展以处理任意对象:

frometuples.coreimportExpressionTuplefromcollections.abcimportSequenceclassNode:def__init__(self,rator,rands):self.rator,self.rands=rator,randsdef__eq__(self,other):returnself.rator==other.ratorandself.rands==other.randsclassOperator:def__init__(self,op_name):self.op_name=op_namedef__call__(self,*args):returnNode(Operator(self.op_name),args)def__repr__(self):returnself.op_namedef__eq__(self,other):returnself.op_name==other.op_namerands.add((Node,),lambdax:x.rands)rator.add((Node,),lambdax:x.rator)@apply.register(Operator,(Sequence,ExpressionTuple))defapply_Operator(rator,rands):returnNode(rator,rands)
>>>mul_op,add_op=Operator("*"),Operator("+")>>>mul_node=Node(mul_op,[1,2])>>>add_node=Node(add_op,[mul_node,3])

etuplize将把非元组对象转换成相应的etuple形式:

>>>et=etuplize(add_node)>>>pprint(et)e(+,e(*,1,2),3)>>>et.eval_objisadd_nodeTrue

etuplize还可以执行浅对象到-etuple转换:

>>>et=etuplize(add_node,shallow=True)>>>pprint(et)e(+,<__main__.Nodeat0x7f347361a080>,3)

安装

使用pip

pip install etuples

从源安装:

git clone git@github.com:pythological/etuples.git
cd etuples
pip install -r requirements.txt

可以使用提供的Makefile运行测试:

make check

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

推荐PyPI第三方库


热门话题
io空白作为读取文件java的第一个字符   java AJAX登录过程中,如何发出id或密码是否无效的警报?   php中的java解码JSON对象   java将json文件写入磁盘的快速方法   java如何使用PDFBox将带有注释的PDF展平   java如何在JavaFX中将对象传递到第二个窗口?   java Jzy3d保存一个不在Mac上工作的文件,错误为“NSWindow拖动区域应仅在主线程上无效!”   java如何在JavaFX TableView中编辑多个单元格?   java在我的spring boot应用程序中存储日志的最佳应用程序是什么?   java卡在泛型中   java如何使用Apache POI从excel工作表中搜索和打印特定单元格?   java如何使用Jackson读取JSON文件中的多个对象?   java从webservice 安卓 studio获取数据   在安卓 studio中不使用毕加索显示的java图像   具有嵌套映射的类的java JAXB编组   java MySQL:突出显示表1中无法在表2中找到的行   java何时使用“新”关键字安卓 API   从Python程序访问JavaRMIAPI