闭包的简单使用
时间:2021-07-25
本文章向大家介绍闭包的简单使用,主要包括闭包的简单使用使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1、闭包的形成:
1、函数嵌套
2、内部函数使用外部函数的变量或参数
3、外部函数返回了内部函数
使用外部函数变量的内部函数称为闭包。
2、闭包的作用
闭包可以保存外部函数内的变量,不会随着外部函数调用完而销毁。
注意点:
由于闭包引用了外部函数的变量,则外部函数的变量没有及时释放,消耗内存。
类似创建了一个全局变量,只有在整个python文件执行结束之后内存才会释放(仅个人理解,有误后续修正)
3、示例
示例1
def func_out(num1: int):
a = 10
# 1、函数嵌套
def func_inner(num2: int) -> None:
# 2、使用外部函数的参数或变量
result = num1 + a + num2
print('结果是:{}'.format(result))
return result
# 3、返回内部函数
return func_inner
# 创建闭包对象
new_func = func_out(2)
new_func(10)
示例2
def config_name(name: str):
def func_inner(msg: str) -> None:
msg = '{}:{}'.format(name, msg)
print(msg)
return func_inner
xx1 = config_name('xx1')
xx1('你到北京了嘛?')
xx2 = config_name('xx2')
xx2('我到了!')
示例3:使用关键字nolocal
修改外部变量
def func_out():
num1 = 10
def func_inner() -> None:
nonlocal num1 # 注意不是global
num1 = 20
result = num1 + 10
print(result)
print('修改前的外部变量:num1={}'.format(num1))
func_inner()
print('修改后的外部变量:num1={}'.format(num1))
return func_inner
new_func = func_out()
new_func()
原文地址:https://www.cnblogs.com/jf-nfto/p/15057460.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 一看就懂的Tensorflow实战(Tensorflow入门)
- 一看就懂的Tensorflow实战(线性回归模型)
- 一看就懂的Tensorflow实战(Logistic回归模型)
- 一看就懂的Tensorflow实战(Logistic回归模型Eager API)
- 聊聊dubbo-go的DubboProtocol
- 一看就懂的Tensorflow实战(最近邻)
- 一看就懂的Tensorflow实战(随机森林)
- 一看就懂的Tensorflow实战(多层感知机)
- 一看就懂的Tensorflow实战(卷积神经网络)
- 一看就懂的Tensorflow实战(多层感知机模型Eager API)
- 一看就懂的Tensorflow实战(K-Means模型)
- 一看就懂的Tensorflow实战(模型的保存与读取)
- 知识卡片 文本分词
- 一看就懂的Tensorflow实战(TensorBoard基础篇)
- 一看就懂的Tensorflow实战(TensorBoard高级篇)