我一直认为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 = 0
>>> def get_a():
… return a
…
>>> get_a()
0
>>> a = 3
>>> get_a()
3

例子中,a为一个global变量,a和get_a()组成了一个闭包,所以a改变时也会直接反应到get_a()函数中。

作用:闭包的作用不言而喻,加强模块化,增强抽象等等。而且在闭包的基础上才实现了装饰器。

4. 装饰器

装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志、性能测试、事务处理等。装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数功能本身无关的雷同代码并继续重用。概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能。
比如你想在在调用某个函数时都想计算其执行时间,那么就可以使用装饰器来进行,比如下面的代码

import timedef timeit(func):def wrapper():start = time.clock()func()end =time.clock()print 'used:', end - startreturn wrapper@timeit
def foo():print 'in foo()'foo()

5. 内建函数:

诸如map, reduce, filter, zip 之类的,但是我觉得这些都可以利用列表解析来完成,而且还更加优雅。

Further Reading and Reference

函数式编程

1.      http://docs.python.org/howto/functional.htmlPython官方文档,讲解了函数式编程的一些要点、原理、机制

2.      http://www.cnblogs.com/huxi/archive/2011/06/24/2089358.html作者尝试引导大家如何用Python使用函数式的思维进行思考

闭包

1.      http://linluxiang.iteye.com/blog/789946  Python闭包研究,作者从汇编代码的角度为大家讲解有关闭包的特性及原理

2.      http://www.ibm.com/developerworks/cn/linux/l-cn-closure/分析了动态语言(Python、Ruby 和 Lua)中的闭包的概念、形式与应用

装饰器

1.      http://www.cnblogs.com/huxi/archive/2011/03/01/1967600.html这里讲解了有关装饰器和面向方面(aspect-oriented)编程的一些要点。

其他

1.      http://hyperpolyglot.org/scripting作者使用众多角度(可谓非常多)对解释性语言(PHP, Perl, Python, Ruby)进行了全面的比较,非常赞!

2.      http://pycoders-weekly-chinese.readthedocs.org/en/latest/issue6/a-guide-to-pythons-magic-methods.html有没有听说过Python魔术方法?这篇文章肯定会让你大开眼界,深入了解Python更神奇的东西

书籍:

《Python源码剖析》这本书在C代码一级,深入细致地剖析了Python的实现。书中不仅包括了对大量Python内置对象的剖析,更将大量的篇幅用于对Python虚拟机及Python高级特性的剖析。读完这本书,相信你能够理解Python中的一般表达式、控制结构、异常机制、类机制、多线程机制、模块的动态加载机制、内存管理机制等核心技术的运行原理,

Python高级特性相关推荐

  1. Python高级特性:切片、迭代、列表生成式、生成器与迭代器

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 接着廖雪峰老师的学习教程,小编要开始加快推进Python的学习进程 ...

  2. Python高级特性——切片(Slice)

    Python高级特性--切片(Slice) 摘录廖雪峰网站 定义一个list: L = ['haha','xixi','hehe','heihei','gaga'] 取其前三个元素: >> ...

  3. 【Python基础】Python高级特性:切片、迭代、列表生成式、生成器与迭代器

    接着廖雪峰老师的学习教程,小编要开始加快推进Python的学习进程了.今天的笔记内容是Python高级特性,其中包括快速访问对象类型元素的切片.循环中的迭代意义.方便的列表生成式操作以及生成器和迭代器 ...

  4. Python学习笔记(五) Python高级特性

    Python高级特性 一. 切片 python中提供了切片(Slice)操作符 , 可以方便的获取list或tuple中的某一段元素 . # -*- coding : utf-8 -*- #Pytho ...

  5. Python高级特性——迭代(Iteration)

    Python高级特性--迭代(Iteration) 1.给定一个集合list或者tuple,可以通过for -- in --的语法来实现循环遍历,这个循环我们就叫做迭代 迭代list: >> ...

  6. 深入详解python高级特性——函数柯里化(Currying)与反柯里化

    前言:本章的内容本来很简单,但是涉及到的理论部分相对较多,想要彻底弄懂前因后果需要具备以下几个知识点, (1)python的高阶函数 (2)python的装饰器本质 (3)Python的functoo ...

  7. 【廖雪峰python总结】python高级特性,函数式编程,面向对象编程,面向对象高级编程

    文章目录 python复习总结 python高级特性 函数式编程 面向对象编程 面向对象高级编程 python复习总结 python高级特性 python高级特性 函数式编程 函数式编程 函数式编程的 ...

  8. Python高级特性(切片,迭代,列表生成式,生成器,迭代器)

    掌握了Python的数据类型.语句和函数,基本上就可以编写出很多有用的程序了. 比如构造一个1, 3, 5, 7, ..., 99的列表,可以通过循环实现: L = [] n = 1 while n ...

  9. python 切片_全面解读Python高级特性切片

    大家好,欢迎来到Crossin的编程教室! 众所周知,我们可以通过索引值(或称下标)来查找序列类型(如字符串.列表.元组-)中的单个元素,那么,如果要获取一个索引区间的元素该怎么办呢? 切片(slic ...

最新文章

  1. phpMyAdmin FTP iptables Selinux
  2. CSP认证201703-2 学生排队[C++题解]:模拟
  3. 实现ISA Server 2006物理机到VMware ESX 4虚拟机的迁移
  4. 12行代码AC——试题 算法训练 猴子吃包子——解题报告
  5. qsort(bsearch,lsearch)—标准库排序,查找
  6. 我很想走到一个森林里旅游
  7. Redis之数据结构和底层编码
  8. Vc6.0 调试指南 --Happy Debugging
  9. linux系统切换清华源(自带的源下载速度太拉跨)
  10. Java判断浏览器类型
  11. 金蝶云php webapi,K/3 Cloud Web API销售出库单PHP完整示例【分享】
  12. 沉痛哀悼我的弟弟-恽小华-南理工教授,候选中科院院士——一声叹息
  13. leetcode 1796
  14. SVO (1)跑数据集
  15. win10系统资源管理器频繁崩溃重启的解决思路
  16. linux内核usleep,Linux下的usleep函数
  17. 黑暗背景(所有暗主题cobalt,dracula...)Rstudio查看对象窗口viewer没有滚动条,白亮背景就有(所有白主题chrome,cloud)。R版本[64-bit] R-3.6.0
  18. 首先实现立即执行轮询函数,然后setInterval再间隔执行轮询函数,实现方法
  19. CrawlSpider爬取拉钩
  20. EasyUI之树形菜单选项卡前端应用

热门文章

  1. 学计算机的让修电脑搞笑段子精选,爆笑段子:女神让我去她家帮她修电脑,我弄了半天也没弄好。...
  2. 【编译原理-实验-1】词法分析器最详细设计报告(c++版)
  3. python实现异步的几种方式_Python 异步编程
  4. uni开发微信小程序自定义相机自动检测(人像+身份证)
  5. JAVA计算机毕业设计基于web的面向公众的食品安全知识系统源码+数据库+系统+lw文档
  6. Nginx的编译安装及基本使用
  7. android 老年模式 oppo,老年版“青少年模式”?为了适老化,OPPO手机新增了这个功能...
  8. select2 多选下拉框的使用
  9. 网络数据传输需要注意的两个问题
  10. 164页5万字轨道交通BIM方案建议书