python 学习(十九)之浅谈闭包

Python从0到100完整学习指南(必看导航) 想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Python爬虫、Web开发、 计算机视觉、机器学习、神经网络以及人工智能相关知识,成为学业升学和工作就业的先行者! 阅读详情

一、定义:

 1.闭包:闭包(Closure)是词法闭包(Lexical Closure)的简称,是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。所以,有另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体。

二、闭包

 例一:

def make_adder(addend):
    def adder(augend):
        return augend + addend
    return adder

p = make_adder(3)
q = make_adder(4)

print p(100)
print q(100)

输出结果:

103
104

分析:

make_adder是一个函数,包括一个参数addend,但是make_adder函数里面又定义了一个新函数,这个新函数里面的一个变量正好是外部make_adder的参数.也就是说,外部传递过来的addend参数已经和adder函数绑定到一起了,形成了一个新函数,我们可以把addend看做新函数的一个配置信息,配置信息不同,函数的功能就不一样了,也就是能得到定制之后的函数.

再看看运行结果,我们发现,虽然p和q都是make_adder生成的,但是因为配置参数不同,后面再执行相同参数的函数后得到了不同的结果.这就是闭包.

dis模块分析python.

dis — Disassembler for Python bytecode,即把python代码反汇编为字节码指令.
使用姿势:python -m dis xxx.py。

上例输出结果:


例二:

def func(name):
    def inner_func(age):
        print 'name:', name, 'age:', age
    return inner_func

bb = func('Praifire')
bb(26)                                                                                                                                                                                                                                                                                                                                                                                                  
输出结果:

name: Praifire age: 26

分析:

这里面调用func的时候就产生了一个闭包——inner_func,并且该闭包持有自由变量——name,因此这也意味着,当函数func的生命周期结束之后,name这个变量依然存在,因为它被闭包引用了,所以不会被回收。


例三:

ef maker(M):  
    def action(X):  
        return X**M  
    return action  
f = maker(3)  
print f(2)  


输出结果:

8

python 闭包总结:个人认为类似数学中复合函数的概念




参考:

https://www.the5fire.com/closure-in-python.html
https://segmentfault.com/a/1190000004461404
http://www.cnblogs.com/ma6174/archive/2013/04/15/3022548.html



用Python+ArcGIS分析厦门共享单车数据:5分钟搞定订单时长与距离分布的可视化 本文详细介绍了如何利用Python和ArcGIS Pro 3.x快速分析厦门共享单车数据,实现订单时长与距离分布的可视化。通过数据清洗、预处理和高级可视化技巧,揭示用户行为特征,为运营优化提供数据支持。文章还提供了环境配置、代码示例和业务洞察,帮助开发者高效完成数据分析任务。 阅读详情

相关推荐

STM32F407 FSMC并口读取AD7606

先贴一下最终效果图.这个是AD7606并口读取数据一个周期后的数据结果. 原始波形用示波器看是很平滑的. AD7606不知为何就会出现干扰, 我猜测可能是数字信号干扰导致的. 因为干扰的波形很有规律. 这种现象基本上可以排除是程序问题. 应该是干扰或者数字信号干扰,或者是数字和模拟共地导致的.是一个宏,实际上是指向的一个内存地址, 这个内存地址是FSMC指定的地址. 使用FSMC接口, 可免于控制引脚, 直接读取某个地址即可, FSMC会自动产生操作时序. 具体请见FSMC相关知识.

走错路的程序员 5496

闭包实践(二)--函数复合

实践一 语言:scheme lisp中每个函数形成了一个闭包,函数和函数复合形成了一个新的闭包,然后和其他的函数符合,可以组成更加复杂的闭包。 (define (compose f g) (lambda (x) (f (g x))))将两个函数复合,形成的新函数接受一个参数 (define (compose-n f n) (if (= n 1)

yuan_da_xing的专栏 579

亚马逊(Amazon ads)广告API申请步骤(已经更新完)

你如果是自己的店铺使用,就选择左边的、如果是授权的那种给别人用就选右边的。审核通过了才能进行下一步,我目前就是刚申请完,后续会持续更新!然后会调整到,下面的页面,选择Agency然后右上角点击创建。审核通过会发邮件到你的企业邮箱、时间大概是1-7天左右。输入对应的信息,点击提交审核,就可以开始申请了。1、广告平台跟卖家平台是分开的,这个概念要清楚。2、注册广告一定要用企业邮箱!回到首页,点击成为合作伙伴。注册了以后会跳转到广告。然后再点击加入合作伙伴。然后会弹出下面的页面。

阿泽的博客 5655

复合函数在JavaScript中的实践

1.背景介绍 复合函数在JavaScript中的实践 复合函数在JavaScript中是一种非常重要的概念,它允许我们将多个函数组合成一个新的函数,以实现更复杂的计算和操作。在本文中,我们将深入探讨复合函数在JavaScript中的实践,包括其核心概念、算法原理、具体代码实例和未来发展趋势。 1.1 JavaScript中的函数 在JavaScript中,函数是一种首屈一凉的数据类型,它可...

AI天才研究院 1173

【Python】torch_npu

Ascend AI处理器核心计算范式与PyTorch的桥接艺术:深入探索torch_npu的基石要真正理解,我们必须首先超越其作为PyTorch后端库的表面认知,深入其所服务的硬件——华为昇腾(Ascend)AI处理器的核心计算范式。这不仅仅是关于如何在NPU上运行PyTorch模型,更是关于NPU如何设计其计算,以及如何巧妙地将这种硬件特性映射到PyTorch的抽象层之上。1. 昇腾AI处理器的达芬奇架构:极致算力的源泉昇腾AI处理器并非传统的CPU或GPU。它采用了华为独创的达芬奇(Da Vinci)架

宅男很神经 5370

迟滞电压比较器电路的原理与计算

迟滞电压比较器是一种具有双阈值特性的电路,通过正反馈机制实现抗噪声干扰功能。文章详细分析了其工作原理,包括同相型和反相型两种结构的电压阈值计算与电阻设计方法,并提供了已知门限求电阻和已知电阻求门限的推导公式。工程应用中需注意输出类型匹配、电阻取值范围、噪声裕量设计等问题。该比较器在信号处理、波形转换等场景中具有重要应用价值,设计时需综合考虑供电电压、参考电压和噪声特性等因素。

硬核科技 2680

【100+ python基础入门-48】闭包函数构造和用法

嵌套函数中,内部函数引用外部函数的参数和变量所获得的结果,被外层函数当做返回值给返回的情况称为闭包函数。

weixin_48728769的博客 621

鲁棒优化 (Robust Optimization) 算法详解及案例分析

鲁棒优化是一种用于处理不确定性优化问题的方法。其目标是在不确定性参数的可能取值范围内,找到一个对不确定性具有鲁棒性的解。

闲人编程的博客 4328

python | 闭包

python | 闭包 基础 作用域 作用域是程序运行时变量可被访问的范围,定义在函数内的变量是局部变量,局部变量的作用范围只能是函数内部范围内,它不能在函数外引用。 定义在模块最外层的变量是全局变量,它是全局范围内可见的,当然在函数里面也可以读取到全局变量的。例如: num = 10 # 全局变量 def foo(): print(num) # 10 而在函数外部则...

mywolfking的专栏 185

23种设计模式-享元(Flyweight)设计模式

软考中级-软件设计师 享元设计模式

片言可决讼,半纸能缚龙 3223

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Python语言学习笔记之闭包

Python学习笔记之闭包

arthur819的博客 406

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Python学习笔记(二十):闭包

接上一篇文章:Python学习笔记(十九):函数引用 闭包: 在一个函数内部再定义一个函数,并且这个函数用到了外部函数的变量,那么就称这个内部函数为闭包; # 定义一个函数 def test(num): print("=== 1 ===") # 在函数内部再定义一个函数,并且这个函数用到了外部函数的变量, # 那么就称这个内部函数为闭包 def test_in(num2): print("=== 2 ===") print(num .

秋忆夏伤的博客 258

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

python函数闭包和递归_孤荷凌寒自学python第十九天python函数嵌套与将函数作为返回对象及闭包与递归...

孤荷凌寒自学python第十九天python函数嵌套与将函数作为返回对象及闭包与递归(完整学习过程屏幕记录视频地址在文末,手写笔记在文末)Python函数非常的灵活,今天学习了python函数的以下几个知识点:一、在函数中可以定义子函数,并且可以将子函数作为函数的返回对象返回给外部测试:def myconnecttostring(*args):def fin():strResult=''for s...

weixin_34396144的博客 186

(十九)python 3 内嵌函数和闭包

内嵌函数:函数里又嵌套一个函数 def fun1(): print('fun1()在被调用') def fun2(): print('fun2()在被调用') fun2() 闭包: 闭包是函数里面嵌套函数,外层函数返回里层函数,这种情况称之为闭包 闭包是概念,不是某种函数类型,和递归的概念类似,就是种特殊的函数调用 闭包可以得...

weixin_30813225的博客 88

【新人系列】Python 入门(十九):装饰器 - 上

装饰器(Decorator)是一种用于修改或增强函数或类的功能的工具。装饰器本质上是一个 Python 函数或类,它可以让其他函数或类在不需要做任何代码修改的前提下增加额外功能,装饰器的返回值也是一个函数或类对象。有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码到装饰器中并继续重用。概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能。func() # 把func_a当做参数传递进来,执行func()就相当于执行func_a()

Newin2020的博客 1471

python函数的嵌套和递归_孤荷凌寒自学python第十九天python函数嵌套与将函数作为返回对象及闭包与递归...

Python函数非常的灵活,今天学习了python函数的以下几个知识点:一、在函数中可以定义子函数,并且可以将子函数作为函数的返回对象返回给外部测试:def myconnecttostring(*args):def fin():strResult=''for strA in args: #这儿函数fin使用的是它的父函数myconnecttostring的形式参数(也就是myconnecttos...

weixin_31642161的博客 191

Python中迭代器、闭包、装饰器的应用和理解。

实例操作: [root@localhost 十九天]# ipython3 /usr/python-3.4.6/lib/python3.4/site-packages/IPython/core/history.py:226: UserWarning: IPython History requires SQLite, your history will not be saved warn("...

美国梦中国心 311

Python学习笔记

java工作者,自学python学习笔记

小松鼠的博客 1254

孤荷凌寒自学python第十九天python函数嵌套与将函数作为返回对象及闭包与递归...

孤荷凌寒自学python第十九天python函数嵌套与将函数作为返回对象及闭包与递归 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) Python函数非常的灵活,今天学习了python函数的以下几个知识点: 一、在函数中可以定义子函数,并且可以将子函数作为函数的返回对象返回给外部 测试: def myconnecttostring(*args): def fin(...

weixin_30568591的博客 136

Python 装饰器:代码功能的优雅增强(二十九)

闭包函数是指有权访问另一个函数作用域中变量的函数。简单来说,当一个内部函数引用了外部函数的变量时,就形成了一个闭包。闭包函数可以记住并访问其外部函数的作用域,即使外部函数已经执行完毕。# 定义外部函数 outer# 在外部函数中定义一个变量 x,并赋值为 10x = 10# 定义内部函数 inner# 内部函数引用了外部函数的变量 xreturn x# 外部函数返回内部函数 inner# 调用外部函数 outer,得到内部函数 inner,并将其赋值给变量 closure。

Android开发领域创作者 786

Python训练第二十九天

函数是动词:描述“做什么”(如类是名词:描述“是什么”(如Python是笔:用它清晰地表达逻辑,而非炫耀语法技巧。经历了一个月的学习,对于传统机器学习和python代码基础有了一定的了解和掌握,也在kaggle数据平台做了实战演练,虽很粗糙但也是自己所学。

qq_62872072的博客 861

python基本42个命令

1.单引号方式2.双引号方式3.三引号方式引号的嵌套使用转义字符\如def 函数名(传入参数):​ 函数体​ return 返回值在使用函数时,先定义函数,在调用函数,参数可以省略,返回值不需要时,也可以省略基本语法class:类的属性 #类的属性即定义在类中的变量类的行为 #类的行为即定义在类中函数,也称做方法,注意写在类外面的函数不能叫方法#创建类对象的语法对象.类名称()案例name=noneage=none。

2301_82000445的博客 5634

我在偷偷学Python的第十九天(变量作用域)

变量作用域 作用域指的是变量的有效范围。 变量并不是在哪个位置都可以访问的,访问权限取决于这个变量是在哪里赋值的,也就是在哪个作用域内的。 通常而言,在编程语言中,变量的作用域从代码结构形式来看,有块级、函数、类、模块、包等由小到大的级别。但是在Python中,没有块级作用域, 也就是类似if语句块、for语句块、with上下文管理器等等是不存在作用域概念的,他们等同于普通的语句。 if True: # if语句块没有作用域 x = 1 print(x) #

MiRemember的博客 249

小甲鱼Python第十九讲课后习题

笔记: 1、内嵌函数:函数内部新创建另一个函数 2、闭包:函数式编程的重要语法,如果在一个内部函数里,对外部作用域(但不是在全局作用域的变量)进行引用,那么内部函数就会被认为是闭包。 3、nonlocal:用于声明局部变量 测试题 0. 如果希望在函数中修改全局变量的值,应该使用什么关键字? global 1. 在嵌套的函数中,如果希望在内部函数修改外部函数的局部变...

weixin_30832983的博客 230

Python入门指北十九

生成器表达式(generator expression)是 Python 中的一种可迭代对象,类似于列表推导式(list comprehension),但生成器表达式返回的是一个生成器对象,而不是一个列表。生成器表达式非常适合处理大数据集,因为它们是惰性计算的,即它们只在需要时才生成值,而不是一次性生成所有值。Python装饰器在Python编程中是一个非常强大的工具,它们主要用于在不修改原函数代码的情况下,给函数增加新的功能。注意,生成器表达式还可以嵌套在其他表达式中,以实现更复杂的逻辑。

m0_60521228的博客 489
上一篇: python 学习(十八)函数再学习
下一篇: python 学习(二十)之模块
Praifire
博客等级 码龄10年 38粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值