美文网首页
Python学习笔记

Python学习笔记

作者: 泛福轩 | 来源:发表于2017-06-14 10:05 被阅读0次

参考文章

高阶函数

特殊的函数,特殊在能将函数作为参数及返回值。

好处在于借助其可以实现 闭包,装饰器 这样的东西。

闭包

是由函数和与其相关的引用环境组合成的实体。实现方式是作为高阶函数的返回值(函数),并和高阶函数内部的自由变量进行了关联(“引用环境”)。

特点是可以实现延迟计算,因为必须调用闭包才会真正进行计算。

不知道Mathematica的延迟定义是否也是基于这样的原理?

所有的函数都有__closure__属性,如果一个函数是闭包,那么它返回一个cell对象组成的元组。这个元组保存的内容就是和闭包关联的引用环境,cell对象的cell_contents属性就是闭包中的自由变量。

>>> def adder(x):
>>>     def wrapper(y):
>>>         return x + y
>>>     return wrapper

# 函数 f 就是一个闭包
# 参数 5 是高阶函数的局部变量
# 同时也是和闭包关联的自由变量
# 基于此才能在脱离 adder 函数后仍能被访问到
>>> f = adder(5)
>>> adder.__closure
>>> f.__closure__
(<cell at 0x7f23dcc31948: int object at 0x296f0f8>,)
>>> f.__closure__[0].cell_contents
5

装饰器

是一个函数,还是高阶函数,可以返回一个闭包

干的事情是重写(装饰)函数,并返回装饰过的函数。

作用是提高代码重用率,简化代码,增加可读性。

装饰过的函数与原始版本的区别在于添加的装饰品,可以实现实现一些通用的功能,如打印函数运行时间,记录函数创建日志等等。

使用——装饰器 可以嵌套多层使用,即是说自定义的装饰器中的包装函数也可以被别的装饰器装饰。

相关文章

网友评论

      本文标题:Python学习笔记

      本文链接:https://www.haomeiwen.com/subject/dgksqxtx.html