入门学习-Python-小甲鱼学习资料-Day020-函数:内嵌函数和闭包
根据视频自己练习 :
课后练习题
1、内嵌函数:函数内部新创建另一个函数
2、闭包:函数式编程的重要语法,如果在一个内部函数里,对外部作用域(但不是在全局作用域的变量)进行引用,那么内部函数就会被认为是闭包。
3、nonlocal:用于声明局部变量
测试题
0. 如果希望在函数中修改全局变量的值,应该使用什么关键字?
global
- 在嵌套的函数中,如果希望在内部函数修改外部函数的局部变量,应该使用什么关键字?
nonlocal
2.Python的函数可以嵌套,但要注意访问的作用域问题哦,请问以下代码存在什么问题呢?
def outside():
print(‘I am outside!’)
def inside():
print(‘I am inside!’)
inside()
inside()是内部函数,不能在外部调用
使用嵌套函数要注意一点就是作用域问题,inside()函数是内嵌在outside()函数中的,所以inside()是人妻,除了身为老公的outside()可以碰(调用),在外边或者别的函数体里是无法对其进行调用的。
- 请问为什么代码A没有报错,但代码B却报错了?应该如何修改?
代码A:
def outside():
var = 5
def inside():
var = 3
print(var)
inside()
outside()
代码B:
def outside():
var = 5
def inside():
print(var)
var = 3
inside()
outside()
这里outside()函数里有一个var变量,但要注意的是,内嵌函数inside()也有一个同名的变量,Python为了保护变量的作用域,故将outside()的var变量屏蔽起来,因此此时是无法访问到外层的var变量的。
应该修改为:
def outside():
var = 5
def inside():
nonlocal var
print(var)
var = 8
inside()
outside()
- 请问如何访问funIn()呢?
def funOut():
def funIn():
print(‘宾果!你成功访问到我啦!’)
return funIn()
funOut()
- 请问如何访问funIn()呢?
def funOut():
def funIn():
print(‘宾果!你成功访问到我啦!’)
return funIn
funOut()()
- 以下是“闭包”的一个例子,请你目测下会打印什么内容?
def funX():
x = 5
def funY():
nonlocal x
x += 1
return x
return funY
a = funX()
print(a())
print(a())
print(a())
8
有些鱼油可能会比较疑惑,这……怎么跟全局变量一样了?局部变量x不是应该在每次调用的时候都重新初始化了吗?!
其实大家仔细看看就明白了,当a = funX()的时候,只要a变量没有被重新赋值,funX()就没有被释放,也就是说局部变量x就没有被重新初始化。
所以当全局变量不适用的时候,可以考虑使用闭包更稳定和安全,你还可以参考 -> 游戏中的角色移动:闭包在实际开发中的作用
- 入门学习-Python-小甲鱼学习资料-Day022-函数:递归是神马
- 入门学习-Python-小甲鱼学习资料-Day021-函数:lambda 表达式
- 学习笔记-小甲鱼Python3学习第二十讲:函数:内嵌函数和闭包
- 函数:内嵌函数和闭包 - 零基础入门学习Python020
- 入门学习-Python-小甲鱼学习资料-Day024-递归:汉诺塔
- 入门学习-Python-小甲鱼学习资料-Day028-文件:因为懂你,所以永恒
- 入门学习-Python-小甲鱼学习资料-Day027-集合:在我的世界里,你就是唯一
- 入门学习-Python-小甲鱼学习资料-Day031-永久存储:腌制一缸美味的泡菜
- 入门学习-Python-小甲鱼学习资料-Day026-字典:当索引不好用时2
- 入门学习-Python-小甲鱼学习资料-Day023-递归:这帮小兔崽子
- 入门学习-Python-小甲鱼学习资料-Day029-文件:一个任务
- Python学习入门基础教程(learning Python)--8.3 字典常用的方法函数介绍
- Python学习入门基础教程(learning Python)--2.3.2Python函数实参详解
- 一个月能入门Python吗?月薪25K的大佬给我整理了函数和模块资料
- Python初学者(零基础学习Python、Python入门)书籍、视频、资料、社区推荐
- Python自学之函数内嵌和闭包
- 零基础入门学习Python(22)--函数:递归是神马
- Python 学习入门(25)—— 闭包
- Python学习笔记(三):Time、函数、模块、文件I/O、异常处理(快速入门篇)