有关Python 特性问题说明研究

开发 后端
最近用到个工程,因为考虑到效率,所以需要用Python 特性中的filter()函数来过滤一个列表,而这个过滤函数实际上需要2个参数而filter()只能传递给过滤函数一个参数。

大多数开发人员对于开发Python应用程序的速度大约是用Java开发同类应用程序速度的10倍,要是相比C/C++节约的时间就更多了,对开发速度采用何种评价标准一直是个很难确定的问题,下文就对Python 特性进行学习。

仔细分析一下,这2个参数中,有1个Python 特性是在request生存期内不变的,而另外一个是用于过滤的值。所以最终用了一下lambda来做了个函数的分阶段参数传递。例子如下,过滤函数:

  1.    # Normal statement-based flow control   
  2.           
  3.           
  4.           if  
  5.          <cond1>:   func1()   
  6.           
  7.           elif  
  8.          <cond2>: func2()   
  9.           
  10.           else  
  11.         :         func3()   
  12.    
  13.         # Equivalent "short circuit" expression   
  14. (<cond1>   
  15.           
  16.           and  
  17.          func1())   
  18.           
  19.           or  
  20.          (<cond2>   
  21.           
  22.           and  
  23.          func2())   
  24.           
  25.           or  
  26.          (func3())   
  27.    
  28.         # Example "short circuit" expression   
  29. >>> x = 3   
  30. >>>   

Python是一种动态语言,而且还常常号称是动态语言里面最慢的一个。最近Ruby的出现才略微改变了一下这种情况。呵呵,听说Ruby比Python还要“动态”一些。在Python中提高效率的一种可选办法是确保可读性的情况下避免使用动态特性,比如过多的"."操作符就很低效。

另外,就是可以用一些函数式编程的方法,比如很多内置函数,如map()、filter()、zip()等等,应用lambda也是个不错的办法。自从 Python 1.0 以来,Python 具有上面列出的大多数 FP 特征。但对于大多数 Python 特性,它们以一种非常混合的语言呈现。

很大程度上是因为Python 特性的 OOP 特性,您可以使用希望使用的部分而忽略其余部分(直到在稍后需要它为止)。使用 Python 2.0, 列表内涵添加了一些 非常棒的“句法上的粉饰”。虽然列表内涵没有添加什么新的能力,但它们使许多旧的能力看起来好了 许多。

Python 中 FP 的基本元素是函数 map() 、 reduce() 和 filter() ,以及运算符 lambda 。在 Python 1.x 中, apply() 函数对于将一个函数的列表返回值直接应用于另一个函数也很方便。

Python 2.0 为这一目的提供了改进的语法。可能让人吃惊,但很少的这几个函数(以及基本运算符)几乎足以编写任何 Python程序;特别是,所有的流控制语句( if 、 elif 、 else 、 assert 、 try 、 except 、 finally 、 for 、 break 、 continue 、 while 、 def )可以只使用 FP 函数和运算符以函数风格处理。

虽然实际上消除程序中的所有流控制命令可能只对加入“混乱的 Python”竞争(与看上去非常象 Lisp 的代码)有用,但是理解 FP 是如何使用函数和递归来表示流控制是值得的。

【编辑推荐】

  1. 如何使Python嵌入C++应用程序?
  2. 深入探讨Ruby与Python语法比较
  3. Python学习资料介绍分享
  4. Python学习经验谈:版本、IDE选择及编码解决方案
  5. 浅析Python的GIL和线程安全
责任编辑:chenqingxiang 来源: 清华大学出版社
相关推荐

2010-03-16 15:12:44

光纤交换机

2010-02-06 09:45:49

Android属性

2010-02-22 13:20:58

Python中文问题

2010-02-26 15:43:02

Python线程

2010-02-02 14:54:28

Python语法

2009-12-28 16:55:30

2010-02-24 17:22:59

Python项目

2010-02-23 14:41:28

Python模块

2010-02-01 17:11:45

Python 解释器

2010-03-10 11:26:29

交换机配置

2010-03-01 10:39:18

Python源代码

2009-11-06 11:10:01

2010-02-22 14:42:19

Python 控制语句

2010-01-13 13:27:00

C++优化

2010-03-01 15:57:59

Python开发工具

2010-01-13 15:41:02

C++的复杂

2010-02-22 15:13:01

Python模块

2010-02-01 16:32:49

Python脚本

2010-02-26 11:20:53

Python应用

2010-03-01 15:23:24

Python操作语言
点赞
收藏

51CTO技术栈公众号