python or not python

我挺喜欢 python 这种编程语言,它本身的丰富的动态特性让这种语言的表达能力很强,基本上 python 上写的一行代码,可实现 java 上 1.5 到 3 行左右的功能。它上手是挺容易的,照着帮助文档学,大概两天左右,有编程经验的人就能把语言的大部分特性学会。

但要注意的是,学会 python 并不意味着能用好 python ,特别是在大型多人协作的项目上。

有以下几点是必须要注意的:

缺乏的有效静态类型检查,需要精心设计单元测试

python 是一种动态语言,本身在静态类型检查等方面缺乏有效工具。采用 python 的项目,都要特别注重单元测试,防止引入了很低级的错误。我曾经遇到过把对象当成了函数,而且在单元测试都没有发现出来,因为这个对象本身被弄成了 callable 的,直到性能测试时,才在日志中发现了这个问题。

接口的概念较弱,设计时和工作分解时有难度

动态语言强大的动态类型有时给设计工作带来很大的麻烦,在设计时我们期望接口是明确目标的并有限制功能的,每一个参数应该是预定义的,而实现时很难限定传入的对象类型。同样的一个接口,不同的人很容易产生不同的理解,因此除非实现者已明确了函数的设计内容,以及它在整个解决方案中的作用,否则就会出现各种各样的实现。上面 callable 对象是其中一个例子,还有一个隐藏得比较深的例子:

某个接口函数 add_callback 需要一个回调函数,这个函数只有 async_result 作为参数,用于在异步调用结束时进行处理。但是为了处理一些额外的参数,于是出现了一个代码,大概如下:

...
for i in range(100):
def f(async_result):
dosomething(i)
dosomething(async_result)
a = A()
a.add_callback(f)
a.start()
...

还有人这样处理了:

def wrapper(i):
def f(async_result):
dosomething(i)
dosomething(async_result)
return f
...
for i in range(100):
a = A()
a.add_callback(wrapper(i))

本来,这应该是属于接口设计上的问题,但是却被通过不同的方法"巧妙"地掩盖了起来。

缺乏足够良好的可参考实践和标准

在实际的项目中,除了强制的缩进,不同的人很容易写出不同的代码风格!

在doc_strings上,python并没有规定注释的标准格式,因此有多种实际使用中的注释方法。

在大型项目方面,目前很少见到用python来编写,可能是目前还不是太多团队会采用 python 。但这点正在变化,像 OpenStack 这样的大项目基于 python 编写,很多工具也支持 python 接口。

由于动态语言的关系,python 在创建一个具有自己特色的框架方面会显得相对容易。因此,python的框架总是一大堆的,django / flask / web.py 之类的框架,每个都很有特色,选择起来容易头痛。

python or not python

这个问题,应该综合开发组实力,以及开发项目的规模、后期维护等因素综合考虑。

如果项目的规模不算大,而且成员都有一定的 python 编程经验,那么在限定编程规范时,还是值得使用 python 来进行快速迭代开发。如果项目大,接口多而复杂,就不建议采用 python 了,这种项目后期的维护工作量大,需要了解项目结构和设计的人才能继续维护 python ,还不如用 java 一些成熟的方案。

python 用得好,能很快建立系统原型,并在后续的开发中进行持续的迭代改进,比使用 java / C# 等要更快能实现一个可运行原型,而且代码量有显著的减少。python 的生态链越来越丰富,将来完善了各项支持工具,或者会有更多的项目采用 python,让它进行良性的发展循环。

python or not python的更多相关文章

  1. Python学习笔记—Python基础1 介绍、发展史、安装、基本语法

    第一周学习笔记: 一.Python介绍      1.Python的创始人为吉多·范罗苏姆.1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言 ...

  2. 【Python大系】Python快速教程

    感谢原作者:Vamei 出处:http://www.cnblogs.com/vamei 怎么能快速地掌握Python?这是和朋友闲聊时谈起的问题. Python包含的内容很多,加上各种标准库.拓展库, ...

  3. python学习笔记-python程序运行

    小白初学python,写下自己的一些想法.大神请忽略. 安装python编辑器,并配置环境(见http://www.cnblogs.com/lynn-li/p/5885001.html中 python ...

  4. python day1:初识Python(一)

    一.Python 简介: Python免费.开源,面向对象的解释型语言,其语法简洁,在使用中无需考虑如何管理内存等底层问题,并且支持在linux,windows等多平台运行,Python的标准库很强大 ...

  5. 智普教育Python培训之Python开发视频教程网络爬虫实战项目

    网络爬虫项目实训:看我如何下载韩寒博客文章Python视频 01.mp4 网络爬虫项目实训:看我如何下载韩寒博客文章Python视频 02.mp4 网络爬虫项目实训:看我如何下载韩寒博客文章Pytho ...

  6. 和我一起学python,初识python (life is short ,we need python)

    作者:tobecrazy  出处:http://www.cnblogs.com/tobecrazy 欢迎转载,转载请注明出处.thank you! 由于项目需要(并非因为life is short), ...

  7. Python之路-python数据类型(列表、字典、字符串、元祖)操作

    一.列表: 列表的语法,以中括号开通和结尾,元素以逗号隔开.例如:name = [] 列表是以下标取值,第一个元素下标是0,第二个元素下标是1,最后一个元素下标是-1.   1.增加 #name = ...

  8. 笨办法学 Python (Learn Python The Hard Way)

    最近在看:笨办法学 Python (Learn Python The Hard Way) Contents: 译者前言 前言:笨办法更简单 习题 0: 准备工作 习题 1: 第一个程序 习题 2: 注 ...

  9. 【循序渐进学Python】12.Python 正则表达式简介

    正表达式就是一段匹配文本片段的模式,在Python 中 re 模块包含了对正则表达式(regular expression)的支持. 1. 正则表达式的基本概念 1. 通配符 点号( . )可以匹配换 ...

  10. 【循序渐进学Python】5.Python常用流程控制及其他语句

    1. 赋值语句常用技巧 通过序列解包(sequence unpacking)可以将多个值的序列解开,让后一一放置到变量的序列中.解包的序列中的元素必须和等号左边变量数量一致.如下: values = ...

随机推荐

  1. post可以直接把get请求代入到目标url中

    Feigong --非攻 非攻 取自<秦时明月>--非攻,针对不同情况自由变化的武器 Feigong,针对各种情况自由变化的mysql注入脚本 Feigong,In view of the ...

  2. HDU 4738 Caocao's Bridges(Tarjan求桥+重边判断)

    Caocao's Bridges Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  3. UAPStudio授权过期的解决方法,重新授权

    1.启动lisence服务器,生成硬件锁, 并导入授权. 需要注意的地方:1.点击工具栏“帮助”下的“UAP-STUDIO”授权管理. 2.删除“D:\UAP-STUDIO\Platform\bin” ...

  4. [IT新应用]存储入门-文件级存储及块级别存储的选择

    http://www.techrepublic.com/blog/the-enterprise-cloud/block-level-storage-vs-file-level-storage-a-co ...

  5. 11. 求奇数分之一序列前N项和

    求奇数分之一序列前N项和 #include <stdio.h> int main() { int denominator, i, n; double item, sum; while (s ...

  6. Nginx 笔记与总结(3)配置虚拟主机

    Nginx 重启的另外一种方式,相当于 kill -HUP `cat /usr/local/nginx/logs/nginx.pid`: /usr/local/nginx/sbin/nginx -s ...

  7. 一个项目软件的大小基本都占用在外部引用的jar包上了。

    1.一个项目几百兆,基本都是外部jar包,引用的. 2.自己本身业务代码并没有那么多的 3.看下meven的仓库大小就知道了,都几百兆

  8. django 1.8 日志配置

    django 1.8 日志配置 以下为setings配置logging代码片段 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(_ ...

  9. thinkPHP实现瀑布流的方法

    thinkPHP实现瀑布流的方法 文章TAG:thinkphp 瀑布流 时间:2014-11-29来源:www.aspku.com 作者:源码库 文章热度: 131 ℃ 过期已备案域名,注册就能用!终 ...

  10. Environment Variables

    https://msdn.microsoft.com/en-us/library/windows/desktop/ms682653(v=vs.85).aspx Every process has an ...