你知道什么是中缀语法吗?你知道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笔记之中缀语法和管道实现相关推荐

  1. Pipe——Python 的中缀语法库

    赖勇浩(http://laiyonghao.com) 注:本文基本上是翻译这篇文章(http://dev-tricks.net/pipe-infix-syntax-for-python). 通过 Pi ...

  2. python基本语法语句-python学习笔记:基本语法

    原标题:python学习笔记:基本语法 缩进:必须使用4个空格来表示每级缩进,支持Tab字符 if语句,经常与else, elif(相当于else if) 配合使用. for语句,迭代器,依次处理迭代 ...

  3. Python爬虫:Xpath语法笔记

    Python爬虫:Xpath语法笔记 一.选取节点 常用的路劲表达式: 表达式 描述 实例   nodename 选取nodename节点的所有子节点 xpath('//div') 选取了div节点的 ...

  4. Python笔记 · Airflow中的DAG与With语法

    在<Python笔记 · With语法糖>这篇文章中我们提到: 在Airflow中通过With构建DAG时,不必显示地将Operator添加到DAG中,只要是在With语句块内声明的Ope ...

  5. Python零基础入门(一)——Python基础关键字和语法[学习笔记]

    Python零基础入门(一)--Python基础关键字和语法 目录 1. Hello World! 2. 字符串操作 3. 简单数学计算 4. if elif else 5. 循环 基础类型 pyth ...

  6. python中xpath使用案例_python爬虫学习笔记:XPath语法和使用示例

    python爬虫:XPath语法和使用示例 XPath(XML Path Language)是一门在XML文档中查找信息的语言,可以用来在XML文档中对元素和属性进行遍历. 选取节点 XPath使用路 ...

  7. python了解一下_想要精通python?19个语法了解一下!

    原标题:想要精通python?19个语法了解一下! Python简单易学,但又博大精深.许多人号称精通Python,却不会写Pythonic的代码,对很多常用包的使用也并不熟悉.学海无涯,我们先来了解 ...

  8. python输出字体的大小_Toby的Python笔记 | 预备知识:安装openpyxl学做电子表格

    Toby的Python笔记 | 预备知识:安装openpyxl学做电子表格 Python 需要创建和读取excel表里面的数据,需要用 openpyxl 这个包,今天安装好备用. 首先,进入C命令窗口 ...

  9. python3语法都相同吗_python3.4学习笔记(一) 基本语法 python3不向下兼容,有些语法跟python2.x不一样...

    python3.4学习笔记(一) 基本语法 python3不向下兼容,有些语法跟python2.x不一样,IDLE shell编辑器,快捷键:ALT+p,上一个历史输入内容,ALT+n 下一个历史输入 ...

  10. Python笔记(7) 字符串

    Python笔记(7) 字符串 1. String 数据类型 2. 访问和更新 3. 转义字符 4. 运算符 5. 格式化 6. 三引号 7. Unicode 字符串 8. 内建函数 1. Strin ...

最新文章

  1. 刚上线就报名2000人!8位大牛免费讲座,再不报名就满额了!
  2. div+css的布局方式进行设计成品作业_原创响应式php企业成品网站,清晰风格版
  3. centos 字体的修改
  4. Major GC 是清理老年代。 Full GC 是清理整个堆空间—包括年轻代和老年代。
  5. python中3个while循环_Python3 里怎么让一个包含 while 循环的异步函数不断运行,而不阻塞正常的代码流程...
  6. C++构造函数详解(复制构造函数)
  7. python网页抓取与按键精灵原理一样吗_按键精灵等以GUI接口为基础的程序在爬虫界的地位是怎样的?...
  8. vue项目中通过图片url下载图片
  9. 【定制开发】【M3】基于Python+pygame实现的人机AI对战五子棋游戏(保姆级入门讲解)
  10. 系列学习 Lambda 表达式之第 2 篇 —— JDK1.8 的 Stream 流基本使用
  11. 20155313 杨瀚 《网络对抗技术》实验七 网络欺诈防范
  12. 利用Python破解WiFi密码
  13. c语言经典100例c22 规律题
  14. Win10玩游戏时输入法引起的闪退解决办法
  15. 【对称加密与非对称加密】-- 概念、图示、优缺点
  16. 蚂蚁聚宝虫洞,数据传输的桥梁
  17. 面试——说说你最荣耀的事(你做过最有成就感的事情)
  18. org.apache.ibatis.session.defaults.DefaultSqlSession@4f9e6460] was not registered for synchronizatio
  19. linux集群 disf,测试方法---SFDIPOT
  20. QT 录制鼠标键盘回放

热门文章

  1. python中re是什么库_Python正则表达式和re库知识点总结
  2. esxi 需要整合 空间不足_太炫酷了!10月微信新花样!微信情侣空间怎么设置如何弄微信情侣空间在哪里开...
  3. Linux select 机制深入分析
  4. JAVA apidoc 官方文档下载地址
  5. iOS开发-- 使用TestFlight进行Beta测试
  6. Centos6.5之yum安装LAMP+wordpress
  7. MySQL Data目录查找并迁移到data文件夹中
  8. 关于struts2漏洞问题及解决办法
  9. 帮助开发者快速创建响应式布局的Boilerplate - Responsive Boilerp...
  10. 【转】php eval函数用法----PHP中eval()函数小技巧