210 likes | 508 Views
F1124004 5110309084 蒋舜宁. 程序设计语言中的瑞士军刀 - Python. 什么是 Python ?. [1]. Python 的偏执. 程序缩进必须良好,否则不允许编译 / 解释。 -_-# 语法死板,无法做成 Ruby on Rails 之类的框架。 但是 …… 豆瓣 : Ruby on Rails or Python???. Python 的设计哲学. “优雅,明确,简单” Python 的语法不那么花哨,更具有可读性,支持大规模软件开发。 -Perl: There's more than one way to do it
E N D
F1124004 5110309084 蒋舜宁 程序设计语言中的瑞士军刀 - Python
Python的偏执 • 程序缩进必须良好,否则不允许编译/解释。 • -_-# • 语法死板,无法做成Ruby on Rails之类的框架。 • 但是…… • 豆瓣: Ruby on Rails or Python???
Python的设计哲学 • “优雅,明确,简单” • Python的语法不那么花哨,更具有可读性,支持大规模软件开发。 • -Perl: There's more than one way to do it • -Python: There should be one-and preferably only one-obvious way to do it. • The Zen of Python: import this
Python经常被人拿来比 (1) • vs Perl [2] • Eric Raymond(一位黑客文化的历史学家以及人类学家) : • Perl(1987)是增强的Shell。 • Pros:强劲的文本处理能力与正则表达式支持,全套Unix API的内部支持,对C的需求顿减。 • Cons:某些部分设计得非常丑陋且无法补救,也过于复杂。当程序规模增大时,必须严格遵守约定,才能保证模块化和设计的可控性,难于维护。
Python经常被人拿来比 (2) • Python(1991):与C语言紧密集成的脚本语言。 • Pros:干净优雅,代码清晰易读,易学易用;面向对象,但并不强求;出色的模块化特性,同Java一样适合用来做需要协同开发的大型复杂项目。多数情况比Java简单。此外,对许多网络协议支持好,很适合网络管理。 • Cons:效率低下,速度缓慢,不仅无法与C/C++竞争,而且也不如其他脚本语言。(注:这问题不严重,有时网络或磁盘的延迟,会完全抵消本身消耗的时间,且性能关键的 Python模块,可以很方便地转化成C语言来提高速度。)
Python经常被人拿来比 (3) • vs Ruby [3] • 语法:Ruby性感,Python质朴。 • 解释器:Ruby打补丁,Python完善。 • 应用领域:Python瑞士军刀,Ruby做Web。 • 第三方包:Python成熟,Ruby有Gem。
某个人的言论 • “如果我个人选择的话,会首选用Rails来构建Web应用,再根据情况选择Python或者Java处理一些服务器后端的运算。总之,未来还是一个混合编程的时代,我们需要多了解一些编程工具,然后根据需要看菜吃饭才行。”[3] • 范凯,JavaEye技术网站创始人,领导JavaEye网站率先在国内推广Hibernate、Spring开源框架、AJAX技术、敏捷软件开发方法和Ruby on Rails等,在数个技术领域(Java/Ruby/Web...) 都是牛人。 对 SNS的系列大作让人耳目一新。
Python的语言特性 • 解释执行 • 动态数据类型 • 函数定义:def func(): • 强制缩进 • Python memory manager (引用计数垃圾收集和可选的循环结构垃圾空间扫描技术)
Python很慢(1) • Python作为解释执行的脚本语言... • 你确定你知道该怎么写快? • e.g. • >>>tmp=x • >>>x=y • >>>y=tmp • >>>x, y=y, x
Python很慢(2) • >>>S=A+B • >>>S.join(A) • >>>S.join(B) • 当你需要监听一个事件: • >>>while True: • >>>while 1:
Python中的一些函数(1) • [4] • filter(func, seq):对seq中的item依次执行func (item),将执行结果为true的item组成一个List/String/Tuple(取决于seq的类型)返回。 • map(func, seq) :对seq中的item依次执行func (item),将执行结果组成一个List返回。 • Lambda: g = lambda x: x * 2 >>> g(3) • 6
Python中的一些函数(2) • yield • def gen(): print ‘let' yield 1 print ‘it' yield 2 print ‘roll’ for i in gen(): print i let 1 it 2 roll
Python的实现 [1] • Cpython: 通常的Python,完全用C语言实现的最原始的版本。 • Jython: Python的纯Java实现;Python源代码可被翻译成在Java虚拟机上运行的Bytecode,而且用户可以从Python访问所有Java库、构建Applet、与Java Bean集成等。 • Python for .NET, IronPython
wxPython • wxPython是一个GUI工具箱。 • 一个自己做的简单软件demo。
一些高性能第三方包 • NumPy: 一个开源的相当于MatLab的包 • SciPy: 另一个数值处理库 • GPULib: 使用GPUs加速代码 • PyPy: 使用 just-in-time 编译器优化Bytecode • Cython: 將Python优码转成C • ShedSkin: 將Python代码转成C++
graphics.py • 另一个简单demo:计科导讨论课大作业。
该怎么用Python? • Python是利器,但也有局限性。 • 我的意见:由于代码简洁精致易读易于实现,所以有想法就随时实现(作为参考的原型),如果有完整实现的意义,那么再借助Python与c/c++的用c/c++去替换一些关键模块来提高效率。 • 特殊需求特殊考虑(文本Perl,Web用Ruby),其余全扔给Python吧!
Reference • [1] http://zh.wikipedia.org/wiki/Python • [2] 《UNIX编程艺术》Eric Raymond • [3]记上海Python社区聚会,谈Python和Ruby • [4] Python特殊语法:filter、map、reduce、lambda、yield
Thanks! • Q&A •