Python的闭包

什么是闭包

#定义一个函数

def test(number):

  #在函数内部再定义一个函数,并且这个函数用到了外边函数的变量,那么将这个函数以及用到的一些变量称之为闭包

  def test_in(number_in):

    print("in test_in 函数, number_in is %d"%number_in)

    return number+number_in #其实这里返回的就是闭包的结果 return test_in #给test函数赋值,这个20就是给参数

numberret = test(20)#注意这里的100其实给参数

number_inprint(ret(100))#注意这里的200其实给参数

number_inprint(ret(200))

运行结果:

in test_in 函数, number_in is 100

120

in test_in 函数, number_in is 200

220

内部函数对外部函数作用域里变量的引用(非全局变量),则称内部函数为闭包。

理解闭包

def counter(start=0):

  count=[start]

  def incr():

    count[0] += 1

    return count[0]

  return incr

 

c1=counter(5)

print(c1())

print(c1())

c2=counter(100)

print(c2())

print(c2())

运行结果

6

7

101

102

函数返回给变量后,函数不会释放,当改变函数中的变量是,下次调用依旧是这个变量

使用nonlocal访问外部函数的局部变量(python3)

def counter(start=0):

  def incr():

    nonlocal start

    start += 1

    return start

  return incr

 

c1 = counter(5)

print(c1())

print(c1())

闭包在实际中的使用

def line_conf(a, b):

  def line(x):

    return a*x + b

  return line

 

line1 = line_conf(1, 1)

line2 = line_conf(4, 5)

print(line1(5))

print(line2(5))

相当于先设定好变量值,当使用的时候就可以直接传递关注的参数就可以了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/508572.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

On the coexistence of transport protocols in data centers

论文信息:S. M. Irteza, A. Ahmed, S. Farrukh, B. N. Memon, and I. A. Qazi.On the coexistence of transport protocols in data centers. In Proceedings of IEEE ICC, 2014.数据中心传输协议的共存 摘要 云数据中心的出现直接导致了数据中心TCP(D…

Python中的特殊属性与方法

模块的特殊属性__doc__模块的说明文档__all__指明模块希望被使用的属性、类和方法__file__模块所在路径类的特殊属性__slots__限制类的实例允许添加的属性,是一个tuple元组类的特殊方法__new__(cls[, ...]) 1. __new__ 是在一个对象实例化的时候所调用的第一个方法 2. 它的第一…

如何做科研20171206

昨日听董大一席话,感触颇多,今日在此进行记录。(加粗字体为董大箴言) ① 关于看论文 董大问我你最近看了什么论文,我说,论文的题目没有记下来,只记得主要讲了什么。我以前一直以为一篇论文的阅…

contiki cooja仿真

最近在做contiki平台上的一些cooja仿真的东西,发现现在网上能学到的东西实在是很有限,现在在这里将我最近学到的一些东西做一下总结。 一、 关于运行的一般步骤: https://www.zhihu.com/question/48708549/answer/139050874 知乎上这个问…

MySQL指令笔记

-- 双中划线空格: 单行注释, 与#相同-- 链接数据库 mysql.exe -h localhost -P3306 -uroot -p-- 查看服务器的对外处理字符集 show variables like character_set%;-- 修改服务器认为的客户端数据的字符集为gbk;(单次访问有效) set character_set_client…

NS2:undefined reference to `xxx' collect2: error: ld returned 1 exit status

这个问题是没有链接。 刚开始先确认,头文件有没有导入。 以下是完整的提示信息错误,检查之后发现hdr_ant_pkt所在的头文件已经被导入;In function hdr_ant_pkt::access(Packet const*): cmu-trace.cc:(.text._ZN11hdr_ant_pkt6accessEPK6Pack…

6大设计原则之单一职责原则

单一职责原则 如果有一个用户管理类,类图如下 我想,任谁也能看的出这个接口设计的有问题,用户的属性和用户的行为没有分开,应该把用户的信息抽取成一个业务对象,把用户的行为抽取成一个业务对象,按照这个思路对类图进行修正,如下图所示 其实,在实际使用中我们更倾向于使用两个…

linux下Gnuplot的使用

压力是最好的老师。以前学不会Gnuplot只是因为不想学,

6大设计原则之里氏替换原则

面对对象中的继承 优点如下: 代码共享,减少创建类的工作量,每个子类都拥有父类的方法和属性提高代码的重用性子类可以形如父类,但又异于父类提高代码的可扩展性,很多开源框架的扩展接口都是通过继承父类来实现的提高产品或项目的开放性 缺点如下: 继承是侵入性的.只要继承,就…

scikit-learn安装

安装找到一个简书版本,讲的挺好的,先贴网址 https://www.jianshu.com/p/26ab6c22051e 但是在安装过程中,遇见了问题,现在贴一下: numpy_quaternion-2018.5.17-cp36-cp36m-win32.whl is not a supported wheel on this …

6大设计原则之依赖倒置原则

依赖倒置原则的定义 依赖倒置原则的原始定义如下: High level modules should not depend upon low level modules. Both should depend upon abstractions. Abstractions should not depend upon details. Details should depend upon abstractions. 翻译过来,包含如下三层…

论文写作——paper Note

论文的一些细节: 1)数字10以下一般用英文单词,10以上用阿拉伯字母; 2)公式最后要有标点,逗号(后面跟where。。。)或者句号; 3)figure的caption尽量多写一点内…

6大设计原则之接口隔离原则

接口隔离原则的定义 什么是接口. 实例接口,比如定义了一个Person类,然后 Person p new Pserson(); 产生一个实例,Person类就是 p 的接口类接口,就是Java中使用 interface 定义的接口 什么是隔离 隔离要求将接口尽量细化,同时接口中的方法尽量少. 接口隔离原则的实现 比如…

6大设计原则之迪米特法则

迪米特法则的定义 迪米特法则也称为最少知识原则,一个对象应该对其他对象有最少的了解. 通俗的讲,一个类应该对自己需要耦合或调用的类知道的最少,被调用类的内部是如何复杂都和我没关系,我就知道你的这些public方法,我就调用这么多,其他的我一概不关心. 迪米特法则对类的低耦…

论文写作——origin画图

一 origin的安装 详见下面网址,内涵下载路径和破解方法。 http://www.ddooo.com/softdown/51005.htm 1. 下载origin 网址:https://thepcgo.com/origin-pro-8-0-free-download/ 2.下载破解相关压缩包 链接:https://pan.baidu.com/s/1LwA…

论文写作——texstudio+texlive

一 安装 安装见下方链接 https://jingyan.baidu.com/article/63f236287febc50208ab3deb.html 二 使用 1、选择模板 IEEE: https://ieeeauthorcenter.ieee.org/create-your-ieee-article/use-authoring-tools-and-ieee-article-templates/ieee-article-templates/ ACM:…

6大设计原则之开闭原则

开闭原则的定义 开闭原则的定义: 一个软件实体,如类、模块和函数应该对扩展开放,对修改关闭.即一个软件实体应该通过扩展来实现变化,而不是通过修改已有的代码来实现变化. 软件实体包括一下部分 项目或软件产品中按照一定的逻辑规则划分的模块抽象和类方法 注意: 开闭原则对…

论文写作——如何作图(visio/ppt+Adobe Acrobat Pro)

前言 在论文中,基本上的图都要求是矢量图,就是即使放大也不会失真。 .eps是最常被要求用的,然而我使用了各种方法(可以试试在线转换格式,很方便)都没能成功转成打得开看得见的.eps格式,又懒得…

23种设计模式之单例模式

单例模式的定义 定义: 确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 单例模式的通用类图如下: 单例模式的优缺点 单例模式的优点: 由于单例模式在内存中只有一个实例,减少了内存开支,特别是一个对象需要频繁的创建、销毁时,而且创建和销毁时性能又无…

讲座记录——大数据共享和交易的挑战与初探

讲者:中科大李向阳教授 数据市场特点: 数据量大且无限供应、价格差异大、所有权不确定、无标准衡量指标、可无限复制 数据交易模式: 买卖双方面对面交易 、通过第三方平台交易(京东万象、数据宝、上海数据交易中心……&#x…