nonlocal关键字用来在函数或其他作用域中使用外层(非全局)变量。

nonlocal用于声明,修改嵌套作用域(enclosing 作用域,外层非全局作用域)中的变量,如下实例:

#!/usr/bin/python3def outer():
num = 10
def inner():
nonlocal num # nonlocal关键字声明
num = 100
print(num)
inner()
print(num)
outer()

结果如下:

100
100

当时学习的时候对于inner()输出的num值还可以理解,但是对于outer输出的num值就觉得不理解了,为什么不是10,毕竟在outer()里面已经有他自己的局部变量应该不会被修改,后来自己加多测试输出之后就廓然开朗啦了,示例如下:

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 寻找有志同道合的小伙伴,
互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def outer():
num =10
def inner(): nonlocal num # nonlocal关键字声明 print('inner-nonlocal-num',num) num = 100 print('inner-local-num',num)
print('outer-local-num',num) inner() print('outer-inner-local-num',num)outer()

结果:

outer-local-num 10
inner-nonlocal-num 10
inner-local-num 100
outer-inner-local-num 100

一看是不是就明白啦,两段代码不同之处只是在变量发生改变之前增加输出结果,从执行顺序看出:

  1. 首先输出outer()本局变量num的值:10

  2. 调用inner(),用nonlocal声明使用外部变量num(10),因此此时输出的是外部变量outer().num: 10

  3. inner()内部生成本局变量num = 100,所以第三次输出的是inner.num的值, 也就是100.

    实际上inner内部仅有一个num=100的本局变量,第二次输出的只是在inner函数里输出外部函数的变量的值。

  4. 第四次输出的num值是调用了inner()后的num值,实际上inner()里面只有1个num=100的局部变量,因此第四次输出的就是inner().num: 也就是100.

此时重新看第一段代码对比之后就知道为什么输出这样的值了,

最后最后,学习的时候,多思考多加测试数据是真的会帮助理解的哟~

Python3中 对local和nonlocal 关键字的改善认识(新手向)相关推荐

  1. python local_Python3中 对local和nonlocal 关键字的改善认识(新手向)

    nonlocal关键字用来在函数或其他作用域中使用外层(非全局)变量. nonlocal用于声明,修改嵌套作用域(enclosing 作用域,外层非全局作用域)中的变量,如下实例: #!/usr/bi ...

  2. nonlocal python3_Python3中 对local和nonlocal 关键字的认识

    nonlocal关键字用来在函数或其他作用域中使用外层(非全局)变量. nonlocal用于声明,修改嵌套作用域(enclosing 作用域,外层非全局作用域)中的变量,如下实例: 结果如下: 当时学 ...

  3. python nonlocal的用法_python中的global和nonlocal关键字怎么使用

    global 和 nonlocal关键字 当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了. 以下实例修改全局变量 num: #!/usr/bin/python3 ...

  4. nonlocal python3_Python中的global和nonlocal关键字

    在进入正题之前先简单说明一下:局部变量:函数或者方法里面定义的变量: 全局变量:本文指module级别的变量(一个python文件就是一个module). global 先看个例子:a = 1 def ...

  5. 一文读懂python3中的所有33个关键字及其用法

    学习python,首先需要熟悉一下python的33关键字. 直接上表:(除前三个关键字,其余按字母表顺序排序) False None True       and as assert break c ...

  6. global与nonlocal关键字

    在Python中,当引用一个变量的时候,对这个变量的搜索是按找本地作用域(Local).嵌套作用域(Enclosing function locals).全局作用域(Global).内置作用域(bui ...

  7. 【Python成长之路】python 基础篇 -- global/nonlocal关键字使用

    课程起源 有一次在工作中编写python工具时,遇到一个 问题:从配置文件读取变量A后,无法在内存中把A的值改变成新的内容.为了解决"更新内存中变量"的这个问题,查找了一些帖子,结 ...

  8. python中nonlocal是什么意思_Python中nonlocal关键字

    在这篇文章中介绍了"Python的闭包与nonlocal"的用法,因为nonlocal是在Python3.0中新增的关键字,python2.x不提供支持,文中提出在Python2. ...

  9. Python3中global/nonlocal用法

          全局变量(global variable)是那些未在任何函数内部定义并且具有全局作用域的变量,而局部变量(local variable)是那些在函数内部定义并且其作用域仅限于该函数的变量. ...

最新文章

  1. cmd常见错误及解决方法
  2. velocity 基础指令
  3. Linux内核学习笔记
  4. 零基础学python需要多久-零基础学python大概要多久
  5. Show percentage use PHP
  6. 软件公司与非软件公司区别(纯个人看法)
  7. Percona XtraDB cluster--第一部分:XtraDB cluster安装 (Centos7)
  8. python如何导入numpy简书_Webpack 之常用配置(一)
  9. 为什么我会觉得SegmentFault做得越来越力不从心了?
  10. 江西省建设工程安全质量监督管理局全省工程安全质量信息数据维护升级存储及异地备份项目中标公告...
  11. CANAPE字体颜色c语言,CANape介绍.doc
  12. java集成信鸽推送
  13. HTML5响应式手机模板:【超炫购物模板】——仿拍鞋网商城手机网站模板( HTML+CSS+JavaScript) 企业手机网站模板...
  14. linux需要添加一个根分区才能安装,linux 根分区扩展
  15. 基于Vue2.0仿Element UI的el-tooltip实现一个气泡框组件,支持多数据类型的显示和内容为空时不显示气泡框
  16. APP隐私合规检测工具Camille环境搭建
  17. 献给不知道自己该干什么的朋友—值得一看
  18. Supervised Contrastive Learning 论文学习
  19. RobotStudio 创建第一个工作站
  20. 起底Palantir:不愿被贴标签的硅谷神秘大数据公司

热门文章

  1. Activity生命周期的补充
  2. 通过反射将变量值转为变量名本身
  3. windows和linux-JDK环境变量设置
  4. Hejr 6-8 - aamsaafanqs Blog - Blogster
  5. junit 案例(三)
  6. Windows 7 硬盘安装
  7. python爬虫知识_Python 爬虫技术分享
  8. 【转】SAP采购订单屏幕增强
  9. SM37 job状态意义
  10. ALV 层级分组显示报表