免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 8630 | 回复: 18
打印 上一主题 下一主题

python 的特点? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-05-24 23:23 |只看该作者 |倒序浏览
最近用pyhton写了几千行代码,感觉写的代码与java的很相似,没有体会到用python写的快感,当然我没有涉及到函数式编程的方面,相反动态语言使得IDE没法充分做代码的自动补全,让我觉得写代码的速度降低不少,请问python最大的特点是什么?要怎样写才能与其他语言不一样,实在是不想用所有的语言写出的代码都一个样,求教中

论坛徽章:
0
2 [报告]
发表于 2008-05-25 04:26 |只看该作者
第一,把函数当作参数传。

第二,把方法动态地插入对象或者类里。

第三,运用duck typing的思想。也就是说,不要过分重视类的继承关系,重视类的接口。

第一点比较简单,第二点和第三点相辅相成,属于高手有高手的想法和做法,俗手有俗手的做法。

建议楼主去看看Dive into Python。

论坛徽章:
0
3 [报告]
发表于 2008-05-25 09:13 |只看该作者
Python真的这么好啊?

论坛徽章:
0
4 [报告]
发表于 2008-05-25 09:25 |只看该作者
又见shhgs!!!!!!!!!!!!
崇拜中。。。。。。。。。。。

论坛徽章:
0
5 [报告]
发表于 2008-05-25 11:31 |只看该作者
原帖由 tianqio 于 2008-5-24 23:23 发表
最近用pyhton写了几千行代码,感觉写的代码与java的很相似,没有体会到用python写的快感,当然我没有涉及到函数式编程的方面,相反动态语言使得IDE没法充分做代码的自动补全,让我觉得写代码的速度降低不少,请 ...

python最大的特点个人认为是“直接”,你想做什么就做什么,来来回回主要就是处理List/Dictionary/Tuple这三种数据结构和关于这三种数据结构的方法,至于再外层的方法/形式多看看其他写的好的代码慢慢就熟悉了,如果你用java的思路写当然像java了,更多的时间还是花在算法上值一些。python做的开源项目其相关文档都对系统的数据结构描述的很清楚而且篇幅很多,因为其它的也没什么好写的,一看就懂,java可就不一样了,光整理一遍程序流程就能累个半死,文档中很多都在介绍架构、规范,内容很多、也很漂亮,就是不知道和具体的工作有什么关系?简而言之,java的废话太多!
python写的代码量大致应是java的2/3甚至1/2,比java还要更好阅读一些,这个效率不可小看,当初主要因为这个原因选择了python。
python的自省功能对于开发调试非常有用,喜欢问为什么的技术人员自然喜欢这样的开发语言。
python是posix标准的操作系统下的主流开发语言之一,而posix对于技术人员来说技术寿命更长、劳动价值更被认可一些。
曾经用GanttProject做过一个计划管理的项目,后面的维护过程痛苦不堪,击碎了对java的所有幻想。
最后,推荐一段python写的拼写检查代码,作者是Google 研究主任 Peter Norvig
http://norvig.com/spell-correct.html
中文翻译:
http://blog.youxu.info/spell-correct.html

[ 本帖最后由 broader 于 2008-5-25 11:59 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2008-05-25 21:19 |只看该作者
shhgs说的第二第三点谁给个例子看看?

论坛徽章:
0
7 [报告]
发表于 2008-05-25 21:25 |只看该作者
python的oo现在用的还不熟练,正在学习之中,感觉与c++,java的区别还是比较大的,下一步加强领会first class的函数带来的好处,谢谢大家

论坛徽章:
0
8 [报告]
发表于 2008-05-25 23:35 |只看该作者
动态插入方法的例子。


  1. import datetime
  2. class Dummy():
  3.     pass
  4. o = Dummy()

  5. o.getTimestamp = lambda : datetime.datetime.now().strftime('%c')

  6. print o.getTimestamp()

复制代码


这是我所说的俗手的方法,不过这个方法最容易理解。如果你对Py能作什么还不了解到话,这个例子还是比较容易懂的。

真正搞产品的时候,应该做一个metaclass,然后让类去继承这个metaclass。我不太懂AOP,但好像AOP就是搞这个的。

第三点,最简单的用途是用在回调函数方面。

  1. def echo(s) :
  2.     return s

  3. CMD_MAP = {
  4.     'ECHO' : echo,
  5.     'UPPERCASE' : lambda s : s.upper()
  6. }

  7. class MyProtocol(LineReceiver):
  8.     def lineReceived(self, line):
  9.         try :
  10.             cmd, content = line.split(' ', 1)
  11.         except :
  12.             content = ''
  13.             cmd = line.strip()
  14.         self.transport.write(CMD_MAP[cmd](content) + '\r\n')
  15.         self.transport.loseConnection()
复制代码


这是我工作当中写的程序的一个片段,当然做了一些修改,不过大致的意思没变。这里,这个protocol实现的命令是完全可以扩展的。你只要定义一个接受string,同时返回string的函数,然后到CMD_MAP里面注册一把就行了。

论坛徽章:
0
9 [报告]
发表于 2008-05-26 08:47 |只看该作者
shhgs  太崇拜了

论坛徽章:
0
10 [报告]
发表于 2008-05-26 22:06 |只看该作者
看了broader  提供的blog,感谢,学习中。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP