全部版块 我的主页
论坛 计量经济学与统计论坛 五区 计量经济学与统计软件
2421 1
2017-01-05
摘要: 用Python实现简易可拓展的规则引擎 做这个规则引擎的初衷是用来实现一个可序列号为json,容易拓展的条件执行引擎,用在类似工作流的场景中,最终实现的效果希望是这样的: ![] 简单整理下需求 执行结果最终返回=true= or false 支持四则运算,逻辑运算以及自定义函数等

用Python实现简易可拓展的规则引擎

做这个规则引擎的初衷是用来实现一个可序列号为json,容易拓展的条件执行引擎,用在类似工作流的场景中,最终实现的效果希望是这样的:


简单整理下需求
  • 执行结果最终返回=true= or false
  • 支持四则运算,逻辑运算以及自定义函数等
  • 支持多级规则组合,级别理论上无限(Python递归调用深度限制)
  • 序列化成json
实现

json没有条件判断和流程控制,且不可引用对象,是不好序列化规则的,除非用树来保存,但这样又过于臃肿不好阅读。

在苦苦思索的时候,突然灵光一闪~曾经我用过一个自动装机系统--razor,
它使用一种tag语法来匹配机器并打标签,他的语法是这样的:

["or",     ["=", ["fact", "macaddress"], "de:ea:db:ee:f0:00"]     ["=", ["fact", "macaddress"], "de:ea:db:ee:f0:01"]]


这表示匹配目标机器的Mac地址等于=de:ea:db:ee:f0:00=或=de:ea:db:ee:f0:00=,这种表达既简洁,又足够灵活这种灵活体现在理论上可以无限嵌套,也可以随意自定义操作函数(这里的=、fact)
这灵感来自于古老的=Lisp=,完全可以实现我们的想法~并且简单、好用,还非常非常灵活!就它了!
因此我就使用这种基于=Json Array=的语法来实现我们的规则引擎。
最后实现的语法规则是这样的:

规则语法 基本语法: ["操作符", "参数1", "参数2", ...]

多条判断语句可组合,如:


  ["操作符",        ["操作符1", "参数1", "参数2", ...],["操作符2", "参数1", "参数2", ...]    ]    ["and",        [">", 0 , 0.05],        [">", 3, 2]    ]


*支持的操作符: * 比较运算符:


    =, !=, >, <, >=, <=

逻辑运算符:

    and, or, not, in

四则运算:

    +, -, *, /

数据转换:

    int, str, upper, lower

其他特殊操作符:

    可自定义操作符,例如get,从某http服务获取数据代码

这里Functions这个类,就是用来存放操作符方法的,由于有些操作符不是合法的Python变量名,所以需要用ALIAS做一次转换。
当需要添加新的操作,只需在Functions中添加方法即可。由于始终使用array来存储,所以方法接收的参数始终可以用args[n]来访问到,这里没有做异常处理,如果想要更健壮的话可以拓展validate方法,以及在每次调用前检查参数。

整个规则引擎的核心代码其实就是=~evaluate~=这个10行不到的方法,在这里会递归遍历列表,从最里层的列表开始执行,然后层层往外执行,最后执行完毕返回一个Boolean值,当然这里也可以拓展改成允许返回任何值,然后根据返回值来决定后续走向,这便可以成为一个工作流中的条件节点了。




二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2017-1-5 17:25:00
【CDA数据分析就业班】2017年3月5日
时间2017年3月5日-6月5日         
地点:北京市海淀区厂洼街3号丹龙大厦B座3层
安排:上午9:30-12:00;下午2:00-5:30;晚自习:6:30-8:30
费用:20800元(现
场)/15800元(远程)(食宿自理)
详情:
https://bbs.pinggu.org/thread-3047248-1-1.html


培训简介:          

CDA数据分析就业班是CDA数据分析师在构建数据分析人才培养和认证体系的道路上,为解决当下学员就业难的问题所研发的精品课程。课程以数据分析理论与实践案例结合的方式讲授,内容覆盖了国内企业招聘数据分析师岗位所需的技能,包括统计知识、软件应用(SPSS/SAS/R/Python等)、数据挖掘、数据库、数据决策可视化报告(Tableau/ Recharts)等,学员经过三个月系统全面的脱产学习,达到企业用人标准,快速在大数据时代找准工作定位,抓住大时代的大机遇!


学员对象:

1.   各行业数据分析、数据挖掘从业者

2.   在校数学,经济,计算机,统计等专业教师和学生

3.   经济,医学生物研究院科研人员

4.   数据分析,数据挖掘兴趣爱好者及转行人士

  
报名流程:

1.在线填写报名信息

2.给予反馈,确认报名信息

3.网上缴费

4.开课前一周发送电子版课件和教室路线图


(北京现场班)

(北京直播班)

(上海现场班)

(上海远程班)

(视频班)


联系方式:

曹老师
QQ:28819897062881989706

Mail:caolibo@pinggu.org

Tel:010-53605625

        18810531180


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群