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

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

结果如下:

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

重新更改代码:

结果:

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

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.

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

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

nonlocal python3_Python3中 对local和nonlocal 关键字的认识相关推荐

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

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

  2. nonlocal python3_Python 中的 global、nonlocal 辨析

    global 语句 语法:声明此变量为全局变量 用法: global [变量名] 注意:引用全局变量时,不需要global 声明,但是后面使用或者修改这个全局变量的时候,需要global声明. 应用场 ...

  3. Python3中 对local和nonlocal 关键字的改善认识(新手向)

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

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

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

  5. 一个例子带你搞懂python作用域中的global、nonlocal和local

    在编程中,只要接触过函数的,我相信都理解什么是全局变量和局部变量,概念比较简单,这里就不做解释了.在python中,用global语句就能将变量定义为全局变量,但是最近又发现有个nonlocal,一时 ...

  6. 转载:Objective-C中的 instancetype 和 id 关键字

    Objective-C中的instancetype和id关键字 作者:wangzz 原文地址:http://blog.csdn.net/wzzvictory/article/details/16994 ...

  7. Spring中ref local与ref bean区别

    为什么80%的码农都做不了架构师?>>>    Spring中ref local与ref bean区别 今天在做SSH框架Demo实例时,在ApplicationResources. ...

  8. C#类方法中使用数组参数params关键字的作用

    参数数组(params)关键字可以指定在参数数目可变处采用参数的方法参数. 在方法声明中的 params 关键字之后不允许任何其他参数,并且在方法声明中只允许一个 params 关键字. 先定义一个带 ...

  9. Java中的synchronized与volatile关键字

    原文出处:http://hukai.me/android-training-course-in-chinese/performance/smp/index.html Java中的"synch ...

最新文章

  1. ActivityGroup 实现分页和自定义标签(内有GridView的点击背景样式的改变方法)
  2. java oauth server_Spring OAuth2 ResourceServer外部AuthorizationServer
  3. LB负载均衡集群--LVS
  4. java sar包_linux下查看最占性能的JAVA进程
  5. ElasticSearch 文档路由,你的数据到底存在哪一个分片上_06
  6. 微软开放Windows Phone 7中文开发中心
  7. 机器人煮面机创始人_煮面机器人会是未来的「食神」吗?
  8. 《Shell脚本学习指南》笔记--2011-12-17
  9. xampp修改mysql默认端口需要修改的地方
  10. 使用驱动器中的光盘之前需要将其格式化怎么办,使用驱动器中的光盘之前需要将其格式化寻回方法
  11. SpringCloud、RabbitMQ、Websocket集群搭建以及集群通信
  12. 洛谷----P3717 [AHOI2017初中组]cover
  13. AI——六(图层、蒙版)
  14. python控制手机
  15. 学习笔记(01):【吴刚】PS软件基础实用技巧标准视频教程-04-文件的打开及注意事项...
  16. 用latex写毕业论文--设置附录、参考文献、致谢环境
  17. QTP10破解方法及mgn-mqt82.exe下载
  18. 环信开源计划开启即时通讯云开源平台时代
  19. 数据永久保存?有人要把资料存月球上
  20. 文艺中年高晓松成“岛主” 上万册图书免费看

热门文章

  1. mysql workbench建表时PK,NN,UQ,BIN,UN,ZF,AI
  2. 8. String to Integer (atoi)
  3. Js中的callback机制
  4. Transact SQL 常用语句以及函数
  5. LeetCode 295. 数据流的中位数 Hard难度
  6. 马斯克的“大脑改造计划”,还需要点亮哪些技能树?
  7. List接口的三大实现类比较
  8. 计算机技术在职研究生学校,计算机技术在职研究生招生2020
  9. web---jsp连接数据库
  10. 性能测试服务器数量与线上数量不同,性能需求分析