最近,在工作中踩到了一个关于Python3中nonlocal语句指定的变量作用域的坑。今天趁周六休息总结记录一下。

  众所周知,Python中最常见的作用域定义如下:           

    

  但是,为了更加方便地在闭包函数中定义、引用变量,Python3新引入了nonlocal语句。

    其代表的含义为:“非local、非global也非built-in,典型使用场景多见于闭包函数中内层函数需要引用外层函数定义的变量”;

    其查找顺序为:“local--nonlocal--global--built-in”。

  nonlocal语句相关举例如下:

    1)错误的例子——闭包中内层函数引用了外层函数定义的变量但未使用nonlocal语句:

      

     2)正确的例子——闭包中内层函数引用了外层函数定义的变量,同时使用了nonlocal语句:

      

  Tips:

    这里有个需要注意的地方,就是如果内层函数只是读取外层函数定义的变量而不改写,此时解释器只是按照作用域由近到远的顺序读取即可,不会报错。例如(特别注意下面截图跟1中截图红框标记的部分,二者唯一的区别正是1中对变量进行了改写而下面只是读取并未改写):

      

最新文章

  1. Python开发【第一篇】:初识Python
  2. ubuntu安装(owncloud-docker安装)
  3. 【CMD】
  4. (转) Spring框架笔记(二十五)——NamedParameterJdbcTemplate与具名参数(转)
  5. VI 命令 gg 跳到第一行,dG 删除后面的所有内容
  6. mysql查看bin日志命令
  7. 二、Ubuntu14.04下安装Hadoop2.4.0 (伪分布模式)
  8. POJ 3177 Redundant Paths(Tarjan)
  9. css动画集合地址
  10. Automotive Security的一些资料和心得(6):AUTOSAR
  11. TCP/UDP是如何传输的?
  12. Library:python-memcached on Windows
  13. cookie记录用户的浏览商品的路径
  14. .net C# 苹果消息推送 工具类
  15. 解决报错:IncompleteElementException: Could not find result map...
  16. 用C语言实现QQ刷屏
  17. 将数组写入Plist文件中
  18. Codeforces round 1086
  19. 【转】一个 Linux 上分析死锁的简单方法
  20. python判断字符串是字母 数字 大小写

热门文章

  1. Windows 10 自带 free 屏幕截图/录像软件 Game Bar! 不仅仅是game-游戏呦! 高清晰,高保真,perfect!不仅仅是游戏呦!
  2. Node.js 实战 & 最佳 Express 项目架构
  3. 最新 Apple iPhone 12 价格 All In One
  4. React Hooks & react forwardRef hooks & useReducer
  5. vscode Paste Image插件使用
  6. qt 移动窗口MoveWindow
  7. 转换时间戳,兼容webkit和IE
  8. 10月份上线的NGK有什么不同之处?
  9. CPU飙升的问题
  10. vue页面嵌套其他页面判断是否生产https