python——闭包与闭包中修改外部变量
在函数嵌套的前提下,内部函数引用了外部函数的变量,并且外部函数返回(return)了内部函数,即外部函数返回了引用了外部函数变量的内部函数,这时我们称内部函数为闭包。
比如说如下例子:
# 外部函数
def func_outer(a):# 内部函数def func_inner(b):c = a + breturn creturn func_inner# 创建闭包实例
f = func_outer(1)
# 执行闭包
num1 = f(2)
num2 = f(3)
print(num1)
print(num2)
在这里,f就叫做闭包的实例,func_inner函数就叫做闭包
此时执行结果如下:
可以见得,f里封存了外部函数的变量1,当闭包实例建立出来,再实行闭包实例,此时相当于1+2和1+3,得到了如上结果。
使用debug可以查看到,执行完f = func_outer(1)代码后,此时一个函数对象已经保存在内存当中:
当一开始步入代码num1 = f(2)(实行闭包)后:
一个外部函数.内部函数的对象存储在了内存中,注意:在执行完f = func_outer(1)并没有立即产生这样一个对象,而是在调用时才会产生该对象
这时,再步入内部函数:
这样c=3便出现了,此时在打印c就会出现3,4的出现与3的原理一样
修改外部函数的变量
代码如下:
# 外部函数
def func_outer(a):# 内部函数def func_inner(b):nonlocal aa = 2c = a + breturn creturn func_inner# 创建闭包实例
f = func_outer(1)
# 执行闭包
num1 = f(2)
num2 = f(3)
print(num1)
print(num2)
多了一行nonlocal a 这里的nonlocal关键字是声明我这里用的是外部的a,而不是自己新定义的局部变量a
python——闭包与闭包中修改外部变量相关推荐
- python函数内部变量能改变外部吗_python中,如何利用函数修改外部变量,注意我的要求...
问 题 void swap(int *p1, int *p2){ int temp; //临时变量 temp = *p1; *p1 = *p2; *p2 = temp; } int main(){ i ...
- 【C 语言】指针间接赋值 ( 直接修改 和 间接修改 指针变量 的值 | 在函数中 间接修改 指针变量 的值 | 在函数中 间接修改 外部变量 的原理 )
文章目录 一.直接修改 和 间接修改 指针变量 的值 二.在函数中 间接修改 指针变量 的值 三.在函数中 间接修改 外部变量 的原理 一.直接修改 和 间接修改 指针变量 的值 直接修改 指针变量 ...
- python中字符串怎么引用_Python:字符串中引用外部变量的3种方法
方法一: username=input('username:') age=input('age:') job=input('job:') salary=input('salary') info1='' ...
- 【C++】函数 指针类型参数 与 引用类型参数 对比 ( 修改外部变量需要传入的参数要求 | 参数作返回值 )
文章目录 I . 博客总结 . 指针与引用类型参数 II . 指针作为参数和返回值 III . 引用参数简介 IV . 引用作为参数和返回值 I . 博客总结 . 指针与引用类型参数 1 . 讨论问题 ...
- 能否用痰盂盛饭——谈谈在头文件中定义外部变量
能否用痰盂盛饭--谈谈在头文件中定义外部变量 - garbageMan - 博客园 能否用痰盂盛饭--谈谈在头文件中定义外部变量 "能否用痰盂盛饭"并非是一个技术问题,而是一个哲学 ...
- 如何在vue项目中修改less变量,多主题项目解决方案
如何在vue项目中修改less变量,多主题项目解决方案 参考文章: (1)如何在vue项目中修改less变量,多主题项目解决方案 (2)https://www.cnblogs.com/niubilit ...
- linux环境配置以后生效,Linux中修改环境变量及生效方法
Linux中修改环境变量及生效方法 在/etc/profile文件中添加变量[对所有用户生效(永久的)] 用VI在文件/etc/profile文件中增加变量,该变量将会对Linux下所有用户有效,并且 ...
- linux环境变量生效方式,Linux中修改环境变量及生效方法
Linux中修改环境变量及生效方法 方法一: 在/etc/profile文件中添加变量[对所有用户生效(永久的)] 用VI在文件/etc/profile文件中增加变量,该变量将会对Linux下所有用户 ...
- 中修改环境变量_Golang入门(1):安装与配置环境变量的意义
摘要 在几年前学习Java的时候,环境的配置就会劝退一部分的初学者.而对于Golang来说,也需要从环境的配置开始学起.这一篇文章将从如何安装Golang开始讲起,随后将会提到Golang中的环境变量 ...
最新文章
- 【转】Usage of sendBroadcast()
- 抛出这8个问题,检验你是否真的会ThreadLocal
- 5.1.3 IO控制方式
- oracle expdp 39002,expdp 导入数据时ORA-39002、ORA-39070错误排查
- vscode 执行npm命令_生产力终极指南:用了两年,如今才算真正会用VS Code
- 学校计算机考察内容是什么意思,2019考研计算机复试四项考察内容分析及注意事项...
- 算法工程师面试备战笔记12_决策树
- Objectove-c单例模式
- 学会java要多久_多长时间可以学会Java?
- Parser-Free Virtual Try-on via Distilling Appearance Flows代码解析
- 计算机程序考试试题及答案,计算机程序员考试试题及答案.doc
- java 读取换行_Java中的换行字符读取 - java
- 相片打印机原理_手机照片打印机的原理是什么 便携式照片打印机到底好不好...
- 记 flip 简单的动画思路
- 一道简单的电商数据分析笔试题:求组合商品的库存量
- python Flask 10 Flask请求上下文管理werkzeug
- html源代码资源网,利用HTML源代码,挖掘网络资源
- 系统辨识的几种方法实现MATLAB代码
- 富文本框让最大四百像素_8 大功能,适合摄影师、设计师的开源工具集
- 【LeetCode】1641. Count Sorted Vowel Strings(动态规划)
热门文章
- POJ 2312 Battle City 优先队列+BFS
- 自己实现一个和PYTHON的库一模一样的sha_256算法
- 这份书单,给那些想学Hadoop大数据、人工智能的人
- 基础知识巩固四(问题部分)
- 用Code::Blocks Code profiler插件剖析程序性能
- iOS-NSThread编程详解
- User profile synchronization service starting issues 用户配置文件同步服务启动问题
- Mybatis传入参数map,读取map原创
- 关于项目中属性配置文件的改进
- 操作系统实验报告13:线程池简单实现