python高级特性

来源:互联网 发布:斯基德莫尔学院 知乎 编辑:程序博客网 时间:2024/05/29 17:48
我一直认为Python是一门很神奇的语言。神奇之处在于其既可阳春白雪,亦可下里巴人。也就是其简单到几乎所有的人稍加学习即可上手,但是你如果细细品味,就会发现他还有很多高深的东西。正如一位漂亮的姑娘,一眼看上去就会喜欢上。交往深入,你会发现她精通琴棋书画而且非常有内涵,我相信你这时肯定会深深的迷恋上她。这篇文字的目的就是想整理一些Python的高级特性,试图为大家揭开Python的神秘面纱。Python的高级特性如果深入写的话可以写成一本书,所以这篇文章也只是浅尝辄止。如果大家感兴趣的话,可以阅读后面的参考资料。函数式编程:所谓函数式编程最直接的解释就是利用函数式思维来进行思考问题。那么什么是函数式思维呢?在python中,有以下几种函数式编程相关的话题:

1. 定义匿名函数。
使用lambda可以定义简单的单行匿名函数。如:

lambda_add = lambda x, y: x + y 

这与使用def定义的求和函数完全一样,可以使用lambda_add作为函数名进行调用。然而,提供lambda的目的是为了编写偶尔为之的、简单的、可预见不会被修改的匿名函数。
2. 将函数作为参数。
在Python中可将函数作为参数传递。其原因就在于函数也是对象。实际上,在 Python 中函数是一级对象。你可以像其他对象一样使用而没有什么特别的限制。关于函数就是对象的一个最常见的例子就是 C 中的函数指针;将函数传递到其他的将要使用它的函数。

    #A very simple function      >>>     >>> def greeter():      … print("Hello")      …      >>> #An implementation of a repeat function      >>> def repeat(fn, times):for i in range(times):      … fn()      …      >>> repeat(greeter, 3)      Hello      Hello      Hello      >>> 
3. 闭包定义:如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure)。其实最准确的说法应该是闭包是由函数和与其相关的引用环境组合而成的实体。来看下面的例子。例子中,a为一个global变量,a和get_a()组成了一个闭包,所以a改变时也会直接反应到get_a()函数中。作用:闭包的作用不言而喻,加强模块化,增强抽象等等。而且在闭包的基础上才实现了装饰器。4. 装饰器装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志、性能测试、事务处理等。装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数功能本身无关的雷同代码并继续重用。概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能。

比如你想在在调用某个函数时都想计算其执行时间,那么就可以使用装饰器来进行,比如下面的代码

import time      def timeit(func):          def wrapper():              start = time.clock()              func()              end =time.clock()              print 'used:', end - start          return wrapper      @timeit      def foo():          print 'in foo()'      foo()  
5. 内建函数:诸如map, reduce, filter, zip 之类的,但是我觉得这些都可以利用列表解析来完成,而且还更加优雅。
原创粉丝点击