`
saybody
  • 浏览: 903694 次
  • 性别: Icon_minigender_2
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

为什么俺推荐Python[2]:作为动态语言的Python

阅读更多

  上次的帖子 介绍了脚本语言的优缺点,然后又拿Python和其它脚本语言PK了一下。今天主要是忽悠一下动态语言,捎带忽悠一下Python。如果你看完本贴,觉得动态语言不错,那俺建议你从Python开始入手。<!-- program-think-->

  ★动态语言扫盲
  考虑到还有很多同学对动态语言了解不深入,有必要先来普及一下它的基本常识。已经了解的同学,请略过本节。
  通俗地说:能够在运行时修改自身程序结构的语言,就属于动态语言。那怎样才算是“运行时修改自身程序结构”捏?比如下面这几个例子都 算:在运行时 给某个类增加成员函数及成员变量;在运行时 改变某个类的父类;在运行时 创建出某个函数;......
  从这些例子,你应该对动态语言有一个初步的感觉了吧?毕竟传统的静态语言(比如C、C++、Java),是很难达到这些效果滴。
  另外,有个误区需要澄清一下。很多同学以为脚本语言也就是动态语言。其实两者是 等价滴——虽然两者有很大的交集。比如C#在4.0之后,就可以算是动态语言了,但它不能算是脚本语言;另外,有很多Shell脚本语言,不能算是动态语言。
  关于动态语言更深入的介绍,大伙儿可以看“这里 ”。

  ★为啥要学习动态语言?
  扫盲之后,就该来说一下,学习动态语言的动机了。搞明白动机,学起来才有干劲嘛 :-)

  ◇顺应大趋势
  假如你经常关注TIOBE 的排名,那你应该能察觉出来,动态语言近两年的发展势头比较迅猛(在Top10里面,至少占了半壁江山)。这能从某个侧面反映出动态语言的影响力在扩大。
  假使你不相信TIOBE 的排名,俺再举一个例子。两大开发阵营(Java和dotNet)最近几年也加大了对动态语言的支持力度。比如,dotNet的CLR加入了对IronPythonIronRuby 的支持;Sun当然也不甘示弱,JVM也开始支持GroovyJRuby 等语言。
  俺费了这许多口水,列位看官应该明白动态语言是大势所趋吧。在这动态语言大行其道的日子里,你如果连一门动态语言都没搞懂,那出门都不好意思跟人打招呼。
  不过,话又说回来,静态语言也是不会消亡滴。毕竟,静态语言有自己的优势(比如严谨、性能)。长期来说,必定是动态语言和静态语言并存。各自弥补对方的缺点。

  ◇了解新思维、新理念
  学习一门动态语言还有一个好处:。有很多时候,多学习一门语言,并不一定是为了在工作中用它,而是为了学习新的思维方式、体会新的理念。比如俺就曾经花时间去看Prolog ,但是俺在工作中,从来不需要用到它。(以后有空的话,俺会介绍一下这玩意儿)
  由于动态语言可以在运行时修改自身结构,因此就会产生很多静态语言所没有编程范式和手法(比如evalMixin ,后面会顺带介绍这两个玩意儿)。如果你以前只使用静态语言,那你在学习了动态语言之后,多半会从它身上领略到很多新的思想和理念。

  ◇能够化繁为简
  可能有些同学觉得,前面说的都有些务虚,那咱再来说点具体实在的。大牛Edsger Dijkstra (图灵奖得主)曾经说过:“编程的艺术就是处理复杂性的艺术。”咱们来看看,动态语言是如何处理复杂问题滴。
  假设要你实现一个函数,用来完成两个数的某种 运算,具体的运算类型作为函数的参数传入,然后该函数返回运算结果。比如:

  Foo("+", 2, 4) 返回 6
  Foo("*", 2, 2) 返回 4

  对于上述需求,你会如何实现捏?
  请先暗自盘算1分钟,然后再往下看。

  ......
  Thinking
  ......

  如果你用静态语言(比如C、C++、Java)来实现,你可能会在函数内使用一个switch,根据不同的运算符,进行计算,然后返回计算结果。
  对于某些比较OO的语言(例如C++、Java),你或许还会抽象出一个运算的接口类(纯虚类),然后分别派生出若干个不同的计算类(比如加法类、乘法类),看起来似乎比switch要优雅一些。
  当然,用静态语言还有其它一些玩法,但是代码量都不会少。具体详情可以看很早以前的一个老故事:4个程序员的一天 。(其实俺这个例子的灵感就是从那个老故事剽窃滴)
  现在,咱们来看看Python是如何实现该需求滴。用Python只需要两行 代码即可。请看:

def Foo(op, n1, n2) :
return eval( "%d %s %d" % (n1, op, n2) )

  不懂Python的同学可能要问了,这两行代码是啥子意思呀?
  其实,第一行代码只不过是定义了一个函数头,第2行代码才是精华。这里面利用了动态语言常见的eval 手法(具体参见“这里 ”)。在python里面,内置的eval 函数可以把某个字符串当成一个表达式,并对其求值。而语句 "%d %s %d" % (n1, op, n2) 只不过格式化出一个表达式的字符串。
  顺便再插一句,Python还有一个exec 的内置函数,可以把一段Python源代码作为字符串参数传递给它,让该函数去执行。两个函数结合起来,就能玩出很多花样。具体的花样可以参见“这里

  ★为什么是Python?
  说了动态语言的种种好话,有同学会问了,动态语言有很多种,为啥非要学习Python捏?
  首先,俺在本系列上一个帖子 ,已经对比过Python和另外几种脚本语言。那几种脚本语言正好也是知名的动态语言。Python相对于他们的优势,此处就不再重复啰嗦了。
  其次,单就语法本身而言,Python的语法对动态性的支持是很优雅、很简洁滴。通过刚才那个eval 小例子,大伙应该已经看出来了。为了更形象一点,咱拿前面提到的Mixin 来Show一下Python的语法是如何的简洁。
  通俗地说,Mixin 手法需要在运行时 给某个类增加基类(也就是父类)。对于Python而言,每一个类都有一个内置属性“__bases__”,里面包含这个类当前 的所有基类。假如要在运行时 增加基类,操作“__bases__”这个属性即可。
  比如有一个类A和类B。如果要在运行时把B加为A的父类,可以用如下语句:
A.__bases__ += (B, )
  是不是也很简洁,而且可读性也不差?相比而言,有些动态语言(比如JavaScript),要实现类似的效果,代码就相对复杂了。
  由于Mixin不是今天的重点,就不再深入展开了。

  最后,来个总结发言:如果你之前没有接触过动态语言,建议去学习一下;如果你已经打定主意要学,Python是比较好的候选者。
  好了,今天就聊到这里。下一个帖子,咱们来讲讲Python作为一个纯粹的面向对象语言,有些啥特色。


版权声明
本博客所有的原创文章,作者皆保留版权。转载必须包含本声明,保持本文完整,并以超链接形式注明作者编程随想 和本文原始地址:

http://program-think.blogspot.com/2009/08/why-choose-python-2-dynamic.html

分享到:
评论

相关推荐

    《Python编程:从入门到实践》源代码文件

    通过对这些源代码的学习和实践,读者不仅能深入理解Python编程语言,还能掌握解决实际问题的方法和技巧,为今后的Python开发打下坚实的基础。同时,这些项目也可以作为进一步学习和探索Python相关领域的起点,比如...

    Python毕业设计:车牌识别系统源码.zip

    Python毕业设计:车牌识别系统源码Python毕业设计:车牌识别系统源码Python毕业设计:车牌识别系统源码Python毕业设计:车牌识别系统源码Python毕业设计:车牌识别系统源码Python毕业设计:车牌识别系统源码Python...

    OpenCV 3计算机视觉:Python语言实现

    OpenCV 3计算机视觉:Python语言实现,代码+pdf文档,适合于计算机视觉研究者

    Python源码剖析 深度探索动态语言核心技术.pdf

    根据提供的标题“Python源码剖析 深度探索动态语言核心技术.pdf”以及描述中的相同信息,我们可以推断出这份文档的主要内容是关于Python语言的核心技术深入解析,特别是针对Python作为一门动态语言的特点进行探讨。...

    Python编程三剑客第3版:Python编程从入门到实践第3版快速上手第.pptx

    《Python编程三剑客第3版:Python编程从入门到实践第3版快速上手第》是一本介绍Python编程语言及其应用领域的书籍,适合对Python编程感兴趣的读者阅读。本书的内容主要包括Python编程基础知识和实际应用案例。 本书...

    Python程序基础:Python概述.pptx

    之所以用Python(通称“大蟒蛇”)作为该编程语言的名字,是因为Guido是Monty Python喜剧团的爱好者。 ABC语言是由Guido参与设计的一种教学语言,但ABC语言并没有成功,究其原因,Guido认为是其非开放性造成的。...

    Selenium2自动化测试实战 基于Python语言

    1. **Selenium介绍**:讲解Selenium的历史、架构和其在Web自动化测试中的地位,以及为什么选择Python作为Selenium的编程语言。 2. **环境配置**:指导读者如何安装Python环境,以及安装和配置Selenium库及其依赖,...

    Python3:强大的编程语言及其广泛应用

    Python3是Python编程语言的最新版本,它继承了Python2的诸多优点,并进行了诸多改进和优化。Python3的语法清晰简洁,易于学习掌握,即使是初学者也能快速上手。同时,Python3拥有庞大的标准库和丰富的第三方库,使得...

    Selenium 2自动化测试实战 基于Python语言

    Selenium 2自动化测试实战 基于Python语言 企业批量购书 分享 关注商品举报 Selenium 2自动化测试实战 基于Python语言 这不仅是一本Selenium2自动化测试书,同时还是一本实用的Python基础编程书

    Python语言基础:变量.pptx

    Python是强类型语言,但也是动态类型语言。这意味着变量的类型不是固定的,可以根据赋值自动推断。例如: ```python x = 3 # x是整型 print(type(x)) # 输出: x = "加油,中国!" # x变为字符串类型 print(type(x)...

    《Python编程之美——带你进入Python语言世界》课程设计大纲参考.pdf

    * 对于C/C++或者Java程序员,Python可以作为辅助编程语言 * 对于系统维护人员,使用Python替代shell脚本,可享受超越C语言的表达能力 课程内容 ### _python语言介绍_ * Python初识:了解Python语言的基本特点和...

    Python程序设计:Python介绍.pptx

    Python程序设计:Python介绍全文共13页,当前为第2页。 任务 搭建Python开发环境 任务知识点 Python介绍 Python开发环境 Python程序设计:Python介绍全文共13页,当前为第3页。 知识点:Python介绍 Python程序设计...

    Selenium自动化测试:基于Python语言

    资源包括Selenium自动化测试:基于Python语言的文档以及每章节的代码

    北京理工大学:《Python语言程序设计》详细笔记

    Python 的官方定义:Python 是一种解释型的、面向对象的、带有动态语义的高级程序设计语言。通俗来讲,Python 是一种少有的、既简单又功能强大的编程语言,它注重的是如何解决问题而不是编程语言的语法和结构。 ...

    python-base.py: 千行代码入门Python python-visual.py: 15张图入门Matplotlib

    python_visual_animation.py: 使用Matplotlib画动态图实例 python_spider.py: 一个很“水”的Python爬虫入门代码文件 python_weibo.py: “史上最详细”的Python模拟登录新浪微博流程 python_lda.py: 玩点高级的--带...

    source insight python Python.CLF 语言包

    (5)添加Document Type为Python,File filter为“*.py”,Passer组中Language选项设置为Python Language; (6)单击文档选项对话框的close按钮; (7)单击Preferences窗口OK按钮,退出Preferences窗口,完成...

    python编程(从入门到实践).zip

    Python编程是一种广泛应用于数据分析、网页开发、人工智能等领域的高级编程语言。它的语法简洁明了,易于学习,使得“从入门到实践”的过程相对平滑。本资料包是针对Python编程的初学者设计的,旨在帮助你快速掌握这...

    MicroPython+STM32开发板:用Python语言控制单片机

    MicroPython顾名思义就是可以在微型控制器上跑的Python,换句话说就是用Python语言控制单片机。所谓Python其实就是一种编程语言,就像非常难学的C语言,非常流行的Java语言,适合初学者的Basic语言,适合网页编程的...

    Python基础教程

    原因:作为动态语言的Python,语言结构清晰简单,库丰富,成熟稳定,科学计算和统计分析 都很牛逼,生产效率远远高于c,c++,java,尤其擅长策略回测 图形GUI: PyQT, WxPython,TkInter Python在一些公司的应用: 谷歌:...

    Selenium自动化测试:基于Python语言.azw3

    Selenium是一个主要用于Web应用程序自动化测试的工具集合,在行业内已经得到广泛的应用。...《Selenium自动化测试 基于Python语言》适合任何软件测试人员阅读,也适合作为大专院校师生的学习用书和培训学校的教材。

Global site tag (gtag.js) - Google Analytics