网络编程-Python高级语法-闭包
2024-10-14 19:41:22
什么叫闭包?通俗来说就是函数里嵌套函数,从表现形式来看,内部函数引用外部函数的作用域里的变量,那么内部函数就称为闭包
举例说明:
1、闭包=函数块+定义函数时的环境,inner就是函数块,x就是环境
def outer(x):
def innner(y):
return x+y
return innner
a = outer(1) # 调用outer函数返回内部函数inner返回的的函数变量
print(a(2)) # 通过函数变量传参并运行内部函数,然后返回函数结果
运行结果:3
2、闭包不可以直接访问外部函数作用域的变量
def outer1():
x = 2
def inner1():
x *=x
return x
return inner1
print(outer1()())
运行之后会报错,因为inner1内部不能直接调用外部函数的变量,但是通过下面修改就可以了 def outer1():
nolocal x # 通过nolocal关键字来指定x不是闭包的局部变量
x=2
def inner1():
x*=x
return x
return inner1
print(outer1()())
运行结果:4
3、实际应用场景举例
ori = [0, 0] # 坐标原点 def create(pos=ori): # 传入坐标原点
def play(derict, step): # 方向和步长
new_x = pos[0]+derict[0]*step # 移动后点的新的x轴值
new_y = pos[1]+derict[1]*step # 移动后点的新的y轴值
# 通过容器修改外部函数的局部变量值
pos[0] = new_x
pos[1] = new_y
return pos
return play
a = create()
print(a([1, 0],10))
print(a([0, 1], 20)) 运行结果:[10, 0]
[10, 20]
最新文章
- [HTML/Javascript] JS判断IE浏览器各版本
- 【K8s】Kubernetes 最近正在看的资料
- 从零开始学Bootstrap(1)
- sqlserver行列转换
- iOS:音频
- python大文件迭代器的流式读取,之前一直使用readlines()对于大文件可以迅速充满内存,之前用法太野蛮暴力,要使用xreadlines或是直接是f,
- kotlin学习-初次见面
- Python模块之 - logging
- frameset,iframe框架之间如何互相调用变量、函数
- 20155326刘美岑 Exp6 信息收集与漏洞扫描
- 洛谷 P4345 [SHOI2015]超能粒子炮·改 解题报告
- Android病毒家族及行为(一)
- 40. Linux下7-zip解压到当前目录的命令
- 使用System.Net.Mail发送邮件
- python不用声明数据类型
- SQL基础(一):SQL语法和命令
- 存储5——逻辑卷管理LVM
- 样式 bootstrap purecss Amaze UI 推荐
- STM32(2)——GPIO
- jquery 部分函数源码解析
热门文章
- 利用ESLINT进行js 语法检查,以及局部安装时遇到的一些坑
- [SHOI2008]仙人掌图 II——树形dp与环形处理
- SQL 统计某一天的数据量时, 使用 dateValue(字段) 与 between 性能差异很明显。
- Zookeeper与Curator二三事【坑爹】
- '{}/{}_frames_{:02d}.npy'.format(dataset, train_or_test, i+1)函数
- saltstack主机管理项目:主机管理项目需求分析(一)
- HDU 5984(求木棒切割期望 数学)
- SpringBoot系列:Pojo validation
- Android Studio生成签名文件,自动签名,以及获取SHA1和MD5值
- java(8)二重循环