[python]闭包到底是什么鬼?
这些东西是我在慕课网,廖雪峰大神的python课中学到的。自己写成笔记的形式分享给大家。
先来看一段代码:
def f1(x):
return x*x def new_fn(f):
def fn(j):
print 'print'+f.__name__
return f(j)
return fn g1 = new_fn(f1)
print g1(5)
运行结果:
printf1
25
1.为什么会用到闭包?
在不修改f1函数的前提下,输出f1函数的名称
2.闭包是个什么鬼?
new_fn()函数传入一个参数f(f是一个函数),new_fn()中有一个fn()函数,这个就是增加参数功能的地方。
fn()函数可以使用new_fn()函数接收的参数f。
3.实例化的时候g1 其实就是函数fn()(不准确但是好理解),传入的参数f1就是要增加功能的函数。
这里需要注意的是,g1是一个函数名,加上()就能当作函数来用了。(因为fn返回的是一个函数对象)
总结:
a.闭包就是为了不动原函数里面的代码,还要给它增加‘性功能’的一种手段。
b.通过外面的一层层的函数传递的参数,让最内层的函数可以直接调用外层函数所有参数,从而实现不动原函数的代码,增加新功能的办法。
最后,在python中,修饰器就是最好的体现:
看一段代码:
实现输出传入参数运行了多长时间,并输出,时间单位是传入的参数。
import time def performance(unit):
def performance_decorator(f):
def p(x):
t1 = time.time()
r = f(x)
t2 = time.time()
print 'call %s() in %f %s' % (f.__name__, t2 - t1, unit)
return r
return p
return performance_decorator
@performance('ms')
def factorial(n):
return reduce(lambda x,y: x*y, range(1, n+1)) print factorial(10)
[python]闭包到底是什么鬼?的更多相关文章
- Python 闭包小记
闭包就是能够读取其他函数内部变量的函数.例如在javascript中,只有函数内部的子函数才能读取局部变量,所以闭包可以理解成“定义在一个函数内部的函数“.在本质上,闭包是将函数内部和函数外部连接起来 ...
- 理解Python闭包概念
闭包并不只是一个python中的概念,在函数式编程语言中应用较为广泛.理解python中的闭包一方面是能够正确的使用闭包,另一方面可以好好体会和思考闭包的设计思想. 1.概念介绍 首先看一下维基上对闭 ...
- 学Python后到底能干什么?
Python是一种什么语言? Python是一种计算机程序设计语言.你可能已经听说过很多种流行的编程语言,比如非常难学的C语言,非常流行的Java语言,适合初学者的Basic语言,适合网页编程的Jav ...
- Python 闭包
什么是闭包? 闭包(closure)是词法闭包(lexical closure)的简称.闭包不是新奇的概念,而是早在高级程序语言开始发展的年代就已产生. 对闭包的理解大致分为两类,将闭包视为函数或者是 ...
- JavaScript的“闭包”到底是什么
在JavaScripot函数闭包的定义中,一般都有一个outer 函数,一个inner函数.那么“闭包”到底是指outer函数呢,还是指inner函数? 从官方定义来看,并不清楚:A closure ...
- Python闭包与函数对象
1. Python闭包是什么 在python中有函数闭包的概念,这个概念是什么意思呢,查看Wikipedia的说明如下: “ In programming languages, closures (a ...
- Python闭包及装饰器
Python闭包 先看一个例子: def outer(x): def inner(y): return x+y return innder add = outer(8) print add(6) 我们 ...
- Python闭包详解
Python闭包详解 1 快速预览 以下是一段简单的闭包代码示例: def foo(): m=3 n=5 def bar(): a=4 return m+n+a return bar >> ...
- Python闭包及其作用域
Python闭包及其作用域 关于Python作用域的知识在python作用域有相应的笔记,这个笔记是关于Python闭包及其作用域的详细的笔记 如果在一个内部函数里,对一个外部作用域(但不是全局作用域 ...
随机推荐
- 阿里云产品介绍(二):云服务器ECS的孪生兄弟们
上一篇介绍的云服务器ECS,是阿里云最基础的产品,也是每一个云计算厂商最基础的产品,俗称爆款.除了标准的云服务器,阿里云也不停的在推出面向特殊业务场地的云服务器,可以说是ECS的孪生兄弟们. 这一篇就 ...
- 【CUDA学习】GPU硬件结构
GPU的硬件结构,也不是具体的硬件结构,就是与CUDA相关的几个概念:thread,block,grid,warp,sp,sm. sp: 最基本的处理单元,streaming processor 最 ...
- 【转】編譯Ogre1.9 IOS Dependencies及Ogre Source步驟及相關注意事項…
http://makedreamvsogre.blogspot.tw/2014/01/ios-dependenciesogre-source.html 可能有人會想問我為什麼要自行編譯IOS Depe ...
- 江豚科技|专业移动APP开发与移动互联网解决方案
北京江豚科技(www.eoiiioe.com)是国内领先的移动APP开发解决方案服务商,总部在中国的硅谷--中关村,分别在郑州.深圳设有服务机构. 江豚科技承接各类移动app开发外包和软件定制开发,我 ...
- Android 组件系列-----Activity保存状态
本篇随笔将详细的讲解Activity保存状态的概念,也就是saving activity state. 一.Activity状态保持概念 保存Activity的状态是非常重要的,例如我们在玩一个游戏的 ...
- Expender Header 与 Content互斥展示
Expender 在展开时,Header 不展示:不展开时,展示 Header <Expander dxlc:DockLayoutControl.Dock="Top" IsE ...
- 初始zookeeper与集群搭建实例
zookeeper是什么 Zookeeper,一种分布式应用的协作服务,是Google的Chubby一个开源的实现,是Hadoop的分布式协调服务,它包含一个简单的原语集,应用于分布式应用的协作服务, ...
- Python - 升级所有已安装的第三方包
我们有时候需要把系统上已经安装的第三方的packages升级到最新版.但是easy_install和pip都没有直接的命令可以使用. 我们可以是用如下命令来查看系统上面哪些包过期了. pip list ...
- img标签中的图片加载异常时显示默认的图片
备忘:
- IIS兼容模式设置
X-UA-Compatible IE=EmulateIE7 来自为知笔记(Wiz)