Python高级特性


我一直认为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 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 之类的,但是我觉得这些都可以利用列表解析来完成,而且还更加优雅。


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中的一般表达式、控制结构、异常机制、类机制、多线程机制、模块的动态加载机制、内存管理机制等核心技术的运行原理,



  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python高级特性是指一些内置函数的高级用法,可以帮助我们更方便地完成一些功能。以下是一些常见的Python高级特性的介绍和示例: 1. 列表推导式(List Comprehension):通过简洁的语法创建新的列表。可以在一个列表中根据条件筛选元素、对元素进行操作等。例如: ```python # 创建一个包含1到10的平方的列表 squares = [x**2 for x in range(1, 11)] print(squares) # 输出:[1, 4, 9, 16, 25, 36, 49, 64, 81, 100] ``` 2. 字典推导式(Dictionary Comprehension):类似于列表推导式,可以用简洁的语法创建新的字典。例如: ```python # 创建一个包含1到10的平方的字典 squares_dict = {x: x**2 for x in range(1, 11)} print(squares_dict) # 输出:{1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81, 10: 100} ``` 3. 生成器表达式(Generator Expression):类似于列表推导式,但是返回一个生成器对象,可以逐个生成值,而不是一次性生成所有值。例如: ```python # 创建一个生成器,逐个生成1到10的平方 squares_gen = (x**2 for x in range(1, 11)) print(next(squares_gen)) # 输出:1 print(next(squares_gen)) # 输出:4 # ... ``` 4. 匿名函数(Lambda Function):一种简洁的函数定义方式,通常用于需要一个简单函数的地方。例如: ```python # 定义一个匿名函数,计算两个数的和 add = lambda x, y: x + y print(add(3, 5)) # 输出:8 ``` 5. 高阶函数(Higher-order Function):可以接受函数作为参数或返回函数的函数。例如,`map()`函数可以将一个函数应用到一个可迭代对象的每个元素上。例如: ```python # 将函数应用到列表的每个元素上 numbers = [1, 2, 3, 4, 5] squared_numbers = list(map(lambda x: x**2, numbers)) print(squared_numbers) # 输出:[1, 4, 9, 16, 25] ``` 这些是Python的一些常见高级特性,它们可以帮助我们更加简洁和高效地编写代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值