什么是闭包?(python)
闭包,又称闭包函数或闭合函数,和嵌套函数类似。不同之处在于,闭包函数的外部函数返回的不是一个具体的值,而是一个函数。一般情况下,返回的函数会赋值给一个变量,便于反复调用。
def outer(out):
def inner(inn):
return inn ** out
# 返回inner函数
return inner
# 计算一个数的平方
square = outer(2)
# 计算一个数的立方
cube = outer(3)
# out=2,inn=2
print(square(2))
# out=3,inn=2
print(cube(2))
运行结果为
4
8
在上面程序中,外部函数 outer() 的返回值是函数 inner(),而不是一个具体的数值。
需要注意的是,在执行完 square = outer(2) 和 cube = outer(3) 后,外部函数 outer() 的参数 out 会和内部函数 inner 一起赋值给 square 和 cube,这样在之后调用 square(2) 或者 cube(2) 时,程序就能顺利地输出结果,而不会报错说参数 out 没有定义。
不信输出square试试看:
print(square)
结果为:
<function outer.<locals>.inner at 0x0000019CACBD41F8>
function表明square是一个函数。因为square包含了参数out和内部函数inner。0x0000019CACBD41F8是存放的地址。
使用闭包的好处
上面的程序,完全可以写成下面的形式:
def outer_rewrite(inn, out):
return inn ** out
但是,为什么不用这种方式呢?
使用闭包可以让程序更加简单易读。当函数需要反复调用时,差别就出来了。比如需要计算很多个数的平方,大家觉得下面那种方式更简洁呢?
# 不使用闭包
ex1 = outer_rewrite(inn1,2)
ex2 = outer_rewrite(inn2,2)
ex3 = outer_rewrite(inn3,2)
# 使用闭包
square = outer(2)
ex1 = square(inn1)
ex2 = square(inn2)
ex3 = square(inn3)
答案已经显而易见了。使用闭包比不适用闭包简洁得多。这也是闭包出现的原因。你,get到了么?
参考文献
[1] 什么是闭包,Python闭包(初学者必读),C语言中文网
什么是闭包?(python)的更多相关文章
- Python 简明教程 --- 22,Python 闭包与装饰器
微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 当你选择了一种语言,意味着你还选择了一组技术.一个社区. 目录 本节我们来介绍闭包与装饰器. 闭包与 ...
- python教程与资料
网上有个人写的python快速教程,非常好.比看书好多了.猛击下面的链接地址 http://www.douban.com/group/topic/30008503/ python文档资料收集 pyth ...
- 【Python大系】Python快速教程
感谢原作者:Vamei 出处:http://www.cnblogs.com/vamei 怎么能快速地掌握Python?这是和朋友闲聊时谈起的问题. Python包含的内容很多,加上各种标准库.拓展库, ...
- Python装饰器详解
python中的装饰器是一个用得非常多的东西,我们可以把一些特定的方法.通用的方法写成一个个装饰器,这就为调用这些方法提供一个非常大的便利,如此提高我们代码的可读性以及简洁性,以及可扩展性. 在学习p ...
- Python快速教程目录(转)
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 怎么能快速地掌握Python?这是和朋友闲聊时谈起的问题. Python包含的内容 ...
- Python快速教程
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 怎么能快速地掌握Python?这是和朋友闲聊时谈起的问题. Python包含的内容 ...
- python基础教程
转自:http://www.cnblogs.com/vamei/archive/2012/09/13/2682778.html Python快速教程 作者:Vamei 出处:http://www.cn ...
- Python系列教程大汇总
Python初级教程 Python快速教程 (手册) Python基础01 Hello World! Python基础02 基本数据类型 Python基础03 序列 Python基础04 运算 Pyt ...
- Python入门学习(一)
看完了莫烦Python的视频,对于Python有了一点感觉,接下来打算把小甲鱼的视频啃完,附上学习网址:http://blog.fishc.com/category/python 小甲鱼的视频是从零基 ...
- Python全栈之路----目录
Module1 Python基本语法 Python全栈之路----编程基本情况介绍 Python全栈之路----常用数据类型--集合 Module2 数据类型.字符编码.文件操作 Python全栈之路 ...
随机推荐
- 将Cesium ion上的3D Tiles和Bing imagery应用到osgEarth
Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ Pelican Mapping 激动的宣布支持加载Cesium ...
- Scala统计一个文件所有单词出现的次数
1 import scala.io.Source 2 3 object WordCount extends App { 4 5 val path = "C:\\Users\\Administ ...
- k8s通过Service访问Pod
如何创建服务 1.创建Deployment #启动三个pod,运行httpd镜像,label是run:mcw-httpd,Seveice将会根据这个label挑选PodapiVersion: apps ...
- gin中运行多个服务
运行服务的返回类型为 :http.Handler .gin.New(),gin.Default() 返回的就是此类型.使用&http.Server{....} 设置服务参数使用g.Go(fun ...
- ES_AutoCheck.sh
#!/bin/bash #@es_check #@date 2019/11/26 #@auth tigergao status=`curl -s GET "http://172.16.71. ...
- 【存】008 Linux 文件查找 find
01 一起来认识 find! 在 Linux 系统,find 毫无疑问是最强的文件查找工具.find 一般会与其他命令结合,将查找到的结果作为参数传入到后置命令中,进行删除.统计.复制迁移等操作. 0 ...
- jsp 中的绝对路径和相对路径 ./ 和 ../的区别?
原文地址! https://www.cnblogs.com/brucetie/p/4109913.html 1. 相对路径 相对路径,当前的文件,以根目录为基准,相对于另一个文件的位置. 2.绝对路径 ...
- 反汇编分析C++代码
编译环境:Windows 10 + VS2015 1.问题引入 在Win32环境下,CPU小端模式,参数用栈来传递,写出输出结果. 代码如下: int main() { long long a = 1 ...
- 在IDE中普通项目打成jar包
第一步: File---->Project Structe 第二步: 选择From modules.. 第三步:选择对应的Module和对应的JAR,然后点击ok 第四步:选择好对应的属性,然后 ...
- Eclipse 堆栈和内存大小设置(转载)
1, 设置Eclipse内存使用情况 修改eclipse根目录下的eclipse.ini文件 -vmargs //虚拟机设置 -Xms40m -Xmx256m -XX:PermSize=128M ...