社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

这个Python神器,能让你摸半天鱼!

Python编程 • 3 年前 • 409 次点击  
来自公众号:Python技术

今天给大家分享一个炒鸡炒鸡简单又好用的神器——pampy。

我敢以我的荣誉保证,用了它之后,你写代码的效率可以蹭蹭蹭地提升!

Pampy 是哪路神仙

首先普及一下模式匹配。

模式匹配即给定某种模式,用这种模式去检查序列或字符串是否符合这种模式,这种技术在自然语言处理中经常使用。

Pampy 是 Python 的一个模式匹配类库,一个只有150行的类库,该库优雅、高效值得广大Python的码农加入自己基本开发栈中。

无独有偶,该程序还有一个同名的 Pampy.js 的 JavaScript 版本库。

你如果有兴趣,可以阅读源码,将其照搬到更多的开发语言中。

安装这个库的方式也是老生常谈了:

pip install pampy

Pampy 的花式秀

匹配单个字符

我们可以用 _ 来匹配单个字符:

from pampy import _,match
 
a=['a',1,'b',2,'c',3,'d',4]
 
patter = ['a',1,'b',_,'c',3,'d' ,4]
 
action=lambda x: f'b is: {x}'
 
print(match(a,patter,action))

运行结果是:

b is: 2

从上面例子可以看出,实际上我们只是用 _ 充当一个占位符,当匹配的时候,找到这个占位符对应的元素即可。

匹配字典

我们可以匹配多层级的字典中的任意一个层级的 key 或者 value:

from pampy import _, match

person = {
    'address': {'province''湖北''city''武汉''district''东湖高新'},
    'name''闲欢'
}
patter = {_: {_: '武汉'}}
action = lambda k1, k2: ({'k1': k1, 'k2': k2})
print(match(person, patter, action))

运行结果是:

{'k1': 'address', 'k2': 'city'}

跟前一个例子类似,这里使用 _ 这个占位符占位,然后在 action 里面定位占位符,即可输出结果。

匹配开头和结尾

上面的例子,我们都是使用占位符来占位,但是占位符只能匹配一个字符,下面的例子,我们将用 HEAD 和 TAIL 这两个关键词来匹配开头和结尾,他们可以批评任意多个字符:

from pampy import _,match,HEAD,TAIL
 
a=['a',1,'b',2,'c',3,'d',4]
patter = [HEAD,_,'b',2,'c',3,TAIL]
action=lambda h,m,t: ({'head':h,'middle':m,'tail':t})
print(match(a,patter,action))

运行上面例子,结果是:

{'head': 'a', 'middle': 1, 'tail': ['d', 4]}

我们可以从结果看到,HEAD 匹配了一个字符,TAIL 匹配了两个字符,输出的时候,如果是多个字符,结果会以数组的方式给出。

总结

Pampy 的例子都很简单,大家一阅便知。通过看着几个例子,是不是有种感觉:哇,还有这等神器!

当然,Pampy 的模式匹配不止这么几种方式,还有更多方式有待大家去探索。


--- EOF ---


推荐↓↓↓
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/138714