小甲鱼《零基础学习Python》课后笔记(二十):函数——内嵌函数和闭包
时间:2022-06-17
本文章向大家介绍小甲鱼《零基础学习Python》课后笔记(二十):函数——内嵌函数和闭包,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
首次使用makedown进行博客书写,使用起来感觉也不难,主要是功能需要比较少,不过编写出来的文章很美观。 测试题 0.如果希望在函数中修改全局变量的值,应该使用什么关键字? 使用global关键字。使用global关键字使函数内的局部变量修改为全局变量。
>>> number = 1
>>> def fun1():
number = 3
print(number)
>>> fun1()
3
>>> print(number)
1
>>> def fun1():
global number
number = 3
print(number)
>>> fun1()
3
>>> print(number)
3
1.在嵌套的函数中,如果希望在内部函数修改外部函数的局部变量,应该使用什么关键字?
使用nonocal关键字。
>>> def outside():
number = 4
def inside():
nonlocal number
number *= number
return number
return inside()
>>> outside()
16
2.Python的函数可以嵌套,但是注意访问的作用域问题哦,请问以下代码存在什么问题?
def outside():
print('I am outside!')
def inside():
print('I am inside!')
inside()
函数嵌套中,内部函数只能在外部函数的范围内调用,改为:
def outside():
print('I am outside!')
def inside():
print('I am inside!')
inside()
outside()
3.请问为什么代码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()
因为代码B中var没有定义就使用print打印var,外层函数的var变量内层函数不能访问。 4.请问如何访问funIn()呢?
def funOut():
def funIn():
print('宾果!你成功访问到我啦')
return funIn()
直接调用funOut函数即可:
>>> funOut()
宾果!你成功访问到我啦
5.请问如何访问funIn()呢?
def funOut():
def funIn():
print('宾果!你成功访问到我啦')
return funIn
得加一个小括号:
>>> print(funOut())
<function funOut.<locals>.funIn at 0x0000021DADD9E9D8>
>>> type(funOut())
<class 'function'>
>>> funOut()()
宾果!你成功访问到我啦
我觉得funOut函数返回的funIn类似C语言中的函数名,是一个地址。 6.以下是“闭包”的一个例子,请你目测下会打印什么内容?,
def funX():
x = 5
def funY():
nonlocal x
x += 1
return x
return funY
a = funX()
print(a())
print(a())
print(a())
打印6,7,8。只要认为funX()函数返回的是funY()的地址就能理解了,a()只不过是调用funY()。
- 关于ORA-01555的问题分析(r5笔记第87天)
- 项目工具类
- AJAX常见面试题
- 干货 | Tomcat类加载机制触发的Too many open files问题分析
- 并行查询缓慢的问题分析(r5笔记第86天)
- Swagger文档转Word 文档
- AJAX应用【股票案例、验证码校验】
- IT中的闰秒问题(r5笔记第85天)
- 浅谈exp/imp(下) (r5笔记第84天)
- 多线程编程学习五(线程池的创建)
- 再学习之Spring(面向切面编程).
- Hybris CronJob
- tomcat源码编译和环境搭建(r5笔记第83天)
- NumPy 将停止支持 Python 2,这里有一份给数据科学家的 Python 3 使用指导
- 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 数组属性和方法
- 分布式存储Ceph之PG状态详解
- JS中的事件循环机制与宏队列、微队列笔记
- Redis 哨兵机制以及底层原理深入解析,这次终于搞清楚了
- SQL 找出分组中具有极值的行
- 接入层Nginx架构及模块介绍分享
- 【问题修复】mds0: Metadata damage detected
- 【服务网格架构】Envoy架构概览(6):异常检测
- 分布式存储Cephfs读取优化方案
- SQL 确定序列里缺失值的范围
- 【问题修复】osd自杀问题跟踪
- mds元信息缓存不释放问题
- 线程安全问题,synchronized 和 ReentrantLock 详细讲解
- Ceph RBD灾备方案对比
- RBD快照灾备方案
- 从条件运算符说起,反思什么是好代码