讲述Python 特性大总结
创始人
2024-06-22 10:10:52
0

本文着重介绍Python 特性的问题:这种语言具有非常透明的语法特点,适合不同环境的各种高层任务,几乎可以在所有的操作系统中运行,好了,想了解Python 特性就随本文进入吧。

我们***从最难的问题开始:“到底什么是函数编程 (FP)?”一个答案可能会说 FP 就是您在使用例如 Lisp、Scheme、Haskell、ML、OCAML、Clean、Mercury、Erlang(或其它一些)语言进行编程时所做的。

这是一个稳妥的答案,但不能很确切地阐明问题。不幸的是,即使是函数程序员他们自己也很难对 FP 究竟是什么有个一致的认识。“盲人摸象”的故事用来形容这一情况似乎很合适。

还可以放心地将 FP 与“命令编程”(使用例如 C、Pascal、C++、Java、Perl、Awk、TCL 以及其它大多数语言所执行的操作,至少是在很大程度上)进行对比。 从个人角度来说,我会将函数编程粗略地描绘为至少具有以下几个特征。称得上函数性的语言使这些事情变得简单,而使其它事情变得困难或不可能:

函数是***类(对象)。即,可以对“数据”进行的每样操作都可以使用函数本身做到(例如将一个函数传递给另一个函数)。 将递归用作主要的控制结构。在某些语言中,不存在其它“循环”构造。 重点集中在列表 LISt 处理(例如,名称 Lisp)。列表经常和子列表的递归一起使用以替代循环。#t#
 
“纯”函数语言能够避免副作用。这不包括在命令语言中最普遍的模式,即指定***个,然后将另一个值指定给同一个变量来跟踪程序状态。 FP 不鼓励或根本不允许出现语句,取而代之是使用表达式求值(换句话说,即函数加上自变量)。在很纯粹的情况下,一个程序就是一个表达式(加上支持的定义)。

FP 关心的是计算什么而不是如何计算。 许多 FP 利用了“更高等级”函数(换句话说,就是函数对一些函数操作,而这些函数又对其它函数操作)。
 函数编程的提倡者认为所有这些特征都导致更快速的开发更短以及错误更少的代码。

而且,计算机科学、逻辑和数学领域的高级理论学家发现证明函数语言和程序的正式性能比命令语言和程序容易得多。 固有的 Python 函数能力 自从 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 是如何使用函数和递归来表示流控制是值得的。

消除流控制语句 在我们执行消除联系时要考虑的***件事是 Python “短路”了布尔表达式的求值这一事实。这样就提供了表达式版本的 if/ elif/ else 块(假设每块都调用一个函数,通常总有可能这样安排)。下面是具体方法:

  1. # Normal statement-based flow control   
  2. if : func1()   
  3. elif : func2()   
  4. else: func3()   
  5.  
  6. # Equivalent "short circuit" expression   
  7. ( and func1()) or ( and func2()) or (func3())   
  8.  
  9. # Example "short circuit" expression   
  10. >>> x = 3   
  11. >>> def pr(s): return s   
  12. >>> (x==1 and pr('one')) or (x==2 and pr('two')) or (pr('other'))   
  13. 'other'   
  14. >>> x = 2   
  15. >>> (x==1 and pr('one')) or (x==2 and pr('two')) or (pr('other'))   
  16. 'two'  

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...