python笔记之中缀语法和管道实现
你知道什么是中缀语法吗?你知道python中的中缀操作是什么吗?那你知道操作python也是可以像unix的管道符一样方便吗?那么,废话不说了,直接上代码。
class Pipe(object):def __init__(self, function):self.function = functiondef __ror__(self, other):return self.function(other)def __call__(self, *args, **kwargs):return Pipe(lambda x: self.function(x, *args, **kwargs))
Julien Palard 大神十分的抱歉,直接附上了您的代码,希望您不要介意。在上面的代码中__ror__就是我们python中看到的或操作符,在这里代码重载了或操作符,然后把它变成我们梦寐以求的管道操作符,十分的犀利,我很喜欢。我实在是忍不住想发表一下我的见解,谈谈我对这段代码的认识,如有错误,请扔鸡蛋。
一个例子
@Pipe
def take(iterable, qte):"Yield qte of elements in the given iterable."for item in iterable:if qte > 0:qte -= 1yield itemelse:return@Pipe
def add(x):return sum(x)
这是大神代码中一个take函数的实现,意思是得到一个序列的前qte个值的迭代器,add函数我就不废话了。然后我们来运行一个栗子吧。
一个参数的情况
print [1,2,3,4] | add #10,答案是毫无疑问. 但是,为什么呢?Pipe作为add的装饰器,被装饰过add实际上返回的是Pipe的对象,只不过是对象中拥有了这个add方法。那么,列表在执行管道操作的时候,实际上是Pipe对象调用了__ror__方法,列表参数传给了__ror__.返回值也就是__ror__函数的返回值.
那么请看多参数情况是怎样的吧?
[1,2,3,4] | take(2) #答案返回的是包含1,2的迭代器。那么,带参数和不带参数到底有什么不一样的呢?上面我说过,add函数实际上就是一个Pipe的实例,而在这里也不例外,take函数也是Pipe的一个实例,既然take是一个对象,那么它为什么可以在后面加上一个括号呢?哈哈,很简单,因为__call__函数重载了括号操作符,如果一个类中实现了这个方法,那么该类的对象可以像函数那样使用,然后调用__call__方法,所以take(2)实际上是调用了Pipe的__call__方法,然后又返回了一个新的Pipe实例,接下来就和上面的add一样了。
最后附上Julien Palard大神的github吧
转载于:https://www.cnblogs.com/bergus/p/python-bi-ji-zhi-zhong-zhui-yu-fa-he-guan-dao-shi-.html
python笔记之中缀语法和管道实现相关推荐
- Pipe——Python 的中缀语法库
赖勇浩(http://laiyonghao.com) 注:本文基本上是翻译这篇文章(http://dev-tricks.net/pipe-infix-syntax-for-python). 通过 Pi ...
- python基本语法语句-python学习笔记:基本语法
原标题:python学习笔记:基本语法 缩进:必须使用4个空格来表示每级缩进,支持Tab字符 if语句,经常与else, elif(相当于else if) 配合使用. for语句,迭代器,依次处理迭代 ...
- Python爬虫:Xpath语法笔记
Python爬虫:Xpath语法笔记 一.选取节点 常用的路劲表达式: 表达式 描述 实例 nodename 选取nodename节点的所有子节点 xpath('//div') 选取了div节点的 ...
- Python笔记 · Airflow中的DAG与With语法
在<Python笔记 · With语法糖>这篇文章中我们提到: 在Airflow中通过With构建DAG时,不必显示地将Operator添加到DAG中,只要是在With语句块内声明的Ope ...
- Python零基础入门(一)——Python基础关键字和语法[学习笔记]
Python零基础入门(一)--Python基础关键字和语法 目录 1. Hello World! 2. 字符串操作 3. 简单数学计算 4. if elif else 5. 循环 基础类型 pyth ...
- python中xpath使用案例_python爬虫学习笔记:XPath语法和使用示例
python爬虫:XPath语法和使用示例 XPath(XML Path Language)是一门在XML文档中查找信息的语言,可以用来在XML文档中对元素和属性进行遍历. 选取节点 XPath使用路 ...
- python了解一下_想要精通python?19个语法了解一下!
原标题:想要精通python?19个语法了解一下! Python简单易学,但又博大精深.许多人号称精通Python,却不会写Pythonic的代码,对很多常用包的使用也并不熟悉.学海无涯,我们先来了解 ...
- python输出字体的大小_Toby的Python笔记 | 预备知识:安装openpyxl学做电子表格
Toby的Python笔记 | 预备知识:安装openpyxl学做电子表格 Python 需要创建和读取excel表里面的数据,需要用 openpyxl 这个包,今天安装好备用. 首先,进入C命令窗口 ...
- python3语法都相同吗_python3.4学习笔记(一) 基本语法 python3不向下兼容,有些语法跟python2.x不一样...
python3.4学习笔记(一) 基本语法 python3不向下兼容,有些语法跟python2.x不一样,IDLE shell编辑器,快捷键:ALT+p,上一个历史输入内容,ALT+n 下一个历史输入 ...
- Python笔记(7) 字符串
Python笔记(7) 字符串 1. String 数据类型 2. 访问和更新 3. 转义字符 4. 运算符 5. 格式化 6. 三引号 7. Unicode 字符串 8. 内建函数 1. Strin ...
最新文章
- 刚上线就报名2000人!8位大牛免费讲座,再不报名就满额了!
- div+css的布局方式进行设计成品作业_原创响应式php企业成品网站,清晰风格版
- centos 字体的修改
- Major GC 是清理老年代。 Full GC 是清理整个堆空间—包括年轻代和老年代。
- python中3个while循环_Python3 里怎么让一个包含 while 循环的异步函数不断运行,而不阻塞正常的代码流程...
- C++构造函数详解(复制构造函数)
- python网页抓取与按键精灵原理一样吗_按键精灵等以GUI接口为基础的程序在爬虫界的地位是怎样的?...
- vue项目中通过图片url下载图片
- 【定制开发】【M3】基于Python+pygame实现的人机AI对战五子棋游戏(保姆级入门讲解)
- 系列学习 Lambda 表达式之第 2 篇 —— JDK1.8 的 Stream 流基本使用
- 20155313 杨瀚 《网络对抗技术》实验七 网络欺诈防范
- 利用Python破解WiFi密码
- c语言经典100例c22 规律题
- Win10玩游戏时输入法引起的闪退解决办法
- 【对称加密与非对称加密】-- 概念、图示、优缺点
- 蚂蚁聚宝虫洞,数据传输的桥梁
- 面试——说说你最荣耀的事(你做过最有成就感的事情)
- org.apache.ibatis.session.defaults.DefaultSqlSession@4f9e6460] was not registered for synchronizatio
- linux集群 disf,测试方法---SFDIPOT
- QT 录制鼠标键盘回放
热门文章
- python中re是什么库_Python正则表达式和re库知识点总结
- esxi 需要整合 空间不足_太炫酷了!10月微信新花样!微信情侣空间怎么设置如何弄微信情侣空间在哪里开...
- Linux select 机制深入分析
- JAVA apidoc 官方文档下载地址
- iOS开发-- 使用TestFlight进行Beta测试
- Centos6.5之yum安装LAMP+wordpress
- MySQL Data目录查找并迁移到data文件夹中
- 关于struts2漏洞问题及解决办法
- 帮助开发者快速创建响应式布局的Boilerplate - Responsive Boilerp...
- 【转】php eval函数用法----PHP中eval()函数小技巧