下面给大家一个宝贵的建议,对于那些从来没有学习过编程或者并非计算机专业的编程学习者而言,Python是***的选择之一,并建议那些初学的程序员先从Python开始学习编程。
今天用Python模板函数写了两个程序,水仙花数和***数!经典的c练习题!水仙花数的程序很小,没什么感觉,***数的程序就复杂一些了!同学用c写,我用Python写,代码几乎是对等翻译!我用的机器cpu主频超过同学的两倍,内存是同学的4倍,就这样,程序运行的时间几乎相同(10w个数据)。
可想而知,Python模板函数作为解释型语言,速度上面确实是个巨大的问题!我曾经看到有文章说,就算对解释型语言,Python也是其中比较慢的,可怕。想象一下运行起来比basic还慢的程序。。。!疯了!还有就是,Python模板函数运行起来必须带模板的名称!比如开方的函数!
在函数式编程里面, 我们可以定义匿名函数,也可以把函数赋值给一个变量或作为参数传递给另外一个函数,Python语言很早就支持函数式编程,我们可以用lambda关键字定义一个匿名函数,然后赋值给一个变量,如下所示:
- from string import strip,upper
- #functions:
- #
- def map_add(x):
- return x+3
- #
- if __name__=='__map_add__':
- map_add(x)
- #zip file
- def zip_file():
- #open file
- f = open('map.txt')
- lines = f.readlines()
- print lines
- f.close()
- #
- print 'BEFORE\n'
- for eachline in lines:
- print '[%s]' % eachline[:-1]
- #
- print 'AFTER\n'
- for eachline in map(upper, map(strip, lines)):
- print '[%s]' % eachline
- #
- if __name__=='__zip_file__':
- zip_file()
lambda定义的匿名函数可以引用外围函数的变量,上面的代码中,第二个lambda表达式定义的匿名函数引用了***个匿名函数的参数n,因为***个匿名函数是第二个匿名函数的外围函数。
除了lambda表达式之外,Python模板函数还支持将函数作为参数传递给另外一个函数,有点类似于C语言中的函数指针,Python语言内建的函数filter,map,reduce就可以接受函数参数。
filter(function, sequence)会遍历sequence中的每一个item,并以该item为参数调用function,如果function返回ture,就将该item加到结果sequence中,这就达到过滤sequence的效果,作为参数的function就是过滤的条件,例子如下:
- >>>reduce(lambda x,y:x*y, [1,2,3,4,5]#((((1*2)*3)*4)*5
- >>>120
- >>>reduce(lambda x,y:x*y, [1,2,3], 10)
- >>>60 #((1*2)*3)*10
这里用lambda定义的匿名函数来定义过滤条件,在list a中返回是偶数的items,下面这个模块以一个现有的文本为参数,清除多余空格,再把所有文字都转换为大写(英文)。为子演示程序要创建一个map.txt该文件中有几行前后有多余空格的字符串。
【编辑推荐】