博文

目前显示的是标签为“python”的博文

体验Python函数式编程

在函数式编程里面, 我们可以定义匿名函数,也可以把函数赋值给一个变量或作为参数传递给另外一个函数,Python语言很早就支持函数式编程,我们可以用lambda关键字定义一个匿名函数,然后赋值给一个变量,如下所示: >>> f=lambda(n):n**2 >>> f(6) 36 >>> f=lambda(n):lambda(m):n*m >>> g=f(5) #相当与g=lambda(m):5*m >>> g(9) #相当于5*9 45 lambda定义的匿名函数可以引用外围函数的变量,上面的代码中,第二个lambda表达式定义的匿名函数引用了第一个匿名函数的参数n,因为第一个匿名函数是第二个匿名函数的外围函数。 除了lambda表达式之外,python还支持将函数作为参数传递给另外一个函数,有点类似于C语言中的函数指针,python语言内建的函数filter,map,reduce就可以接受函数参数。 filter( function , sequence ) 会遍历sequence中的每一个item,并以该item为参数调用function,如果function返回ture,就将该item加到结果sequence中,这就达到过滤sequence的效果,作为参数的function就是过滤的条件,例子如下: >>> a=range(1,10) >>> filter(lambda(n):n%2==0,a) [2, 4, 6, 8] 这里用lambda定义的匿名函数来定义过滤条件,在list a中返回是偶数的items map( function , sequence )也是遍历sequence中的每一个item, 并以该item为参数调用function,然后将执行结果添加到最终的结果sequence中,例子如下: >>> b=range(1,10) >>> map(lambda(n):n**2,b) [1, 4, 9, 16, 25, 36, 49, 64, 81] reduce( function , sequence )先把sequence中的头两个item作为参数传给function,将function...

python开发GUI界面的选择Tkinter与wxPython

1.Tkinter Tkinter是python发行版自带的一个跨平台的图形界面开发工具包,Tkinter封装了TK图形库,Tkinter程序可以运行在Windows、Linux、Mac上面而不用做任何修改,在Python中开发Tkinter程序也很简单,下面就是一个简单的Hello world程序 import Tkinter #import Tkinter module root = Tkinter.Tk() # create the root window w = Tkinter.Label(root, text="Hello, world!") # create the Label widget w.pack() # make above label visiable and pack it to the size of its content root.mainloop() # Create the event loop 我们可以在 http://www.pythonware.com/library/tkinter/introduction/ 找到Tkinter的教程 2.wxPython wxPython是另外一个跨平台的图形库,和Tkinter类似,wxPython程序可以不用任何修改就可以运行在Windows、Linux、Mac上面,wxPython底层封装了跨平台的图形库wxWidgets(以前叫做wxWindows),由于wxWidgets是由C++开发出来的,这就决定了wxPython的性能要比Tkinter强。使用wxPython之前,需要到 http://www.wxpython.org 下载一个和你的操作系统和python版本一致的wxPython runtime,下载之后,运行下面命令安装wxPython python setup.py install 之后我们就可以用wxPython来开发GUI程序了,下面代码演示了如何编程 import wxPython,wx # import required wxPython module class MyFrame(wx.Frame): def __init__(self, parent, id, title): wx.Frame.__init__(se...

选Ruby还是选Python?

  最近,我需要一种快速开发语言,目前炙手可热的快速开发语言就是Python和Ruby了。Ruby和Python都是非常优秀的脚本语言,虽然他们的设计哲学几乎完全不同,但他们效率差不多,应用领域也差距不大,似乎天生就是竞争对手。到底选那个呢?我做了一些简单的比较。   我们比较两种语言的时候,抛开性能问题不说,一般最在意的大概就是资源和学习曲线。   总体的印象,用一个不大恰当的比喻:如果Python是Java,那么Ruby就是.net。我们知道,Java世界非常复杂,非常多样性,任何一个需求,都会有很多开源项目,他们用不同的思想来实现,性能特点迥异,到底选那个,总是令人犯难。现在Python也是如此,而由于Python开发难度远远低于Java,导致Python的相关项目比Java还要多得多。   资源上,两者社区都很强,有趣的是,现在Java社区存在被Ruby同化的危险,至少我订阅的几个Java blog聚合中谈Ruby比Java还多。Ruby的社区较为集中,Python则比较分散。我总怀疑Ruby的日本用户较多,但因为不懂日文,很难确认这个想法。对于一个母语非英语的创始人,我总是有点恐惧,怕很难理解他,怕很难得到最新消息等等等,虽然这个担心目前看来并无必要,不过,谁知道会怎么样呢。   Ruby之所以现在突然变得热门,和rails这套架构是分不开的。考虑Ruby,就要考虑到Ruby on rails。rails提供了一套非常好的web开发框架,开发效率非常高。Python虽然有很多类似的架构实现,但并没有出现一个能够一统江湖的架构。Python的zend虽然完整,但更偏向于web服务器,不能用来和rails比较。   Ruby比pyton更容易上手。从语言特征看,Ruby有很多有意思的创造,比如说block,但大规模的应用这些好玩的东西让程序变得混乱。Python语法强调简单,但是由于太灵活,简单得太过分,于是传统程序员经常会看到一些令人大吃一惊的表达方式。我不知道这应该算优点还是缺点,至少我认为语法过于灵活,容易导致不同程序员的代码风格差异过大,增加了学习成本。   初期入门,Ruby更容易,但一旦达到一定复杂度,那么Ruby的难度骤然加大。Python入门不容易,复杂的时候也不会太痛苦。rails有入门简单,深入难的问题。rails生成的目录是做什么用途?o...