nonlocal语句

nonlocal语句和global是近亲。它和global的不同之处在于,nonlocal应用于一个嵌套的函数的作用域中修改名称,而不是所有def之外的全局模块作用域;而且在声明nonlocal名称的时候,它必须已经存在于该嵌套函数的作用域中——它们可能只存在于嵌套的函数中,并且不能由一个嵌套的def中的第一次赋值创建。

nonlocal应用

我们先来看一些nonlocal的例子

#示例1
>>> def tester(start):
...     state = start
...     def nested(label):
...         print(label,state)
...     return nested
...
>>> F = tester(0)
>>> F('spam')
spam 0#尝试在嵌套的def内修改state
>>> def tester(start):
...     state = start
...     def nested(label):
...         print(label,state)
...         state += 1
...     return nested
...
>>> F = tester(0)
>>> F('spam')
Traceback (most recent call last):File "<stdin>", line 1, in <module>File "<stdin>", line 4, in nested
UnboundLocalError: local variable 'state' referenced before assignment

使用nonlocal进行修改后:

#示例2
>>> def tester(start):
...     state = start
...     def nested(label):
...         nonlocal state
...         print(label,state)
...         state += 1
...     return nested
...
>>> F = tester(0)
>>> F('spam')
spam 0
>>> F('ham')
ham 1
>>> F('YAMAHA')
YAMAHA 2
>>> G = tester(45)
>>> G('China')
China 45
>>> F('re')
re 3

注意:

  1. nonlocal语句允许在内存中保存可变状态的副本,并且解决了在类无法保证的情况下简单的状态保存。(在示例2中有这样的体现)
  2. 当执行一条nonlocal语句时,nonlocal名称必须已经在一个嵌套的def作用域中赋值过,否则将会得到一个错误——不能通过在嵌套的作用域给它们一个新值来创建它们(即边界情况)

Python笔记之nonlocal语句相关推荐

  1. Python笔记6——判断语句

    判断语句 定义 if语句 2.1 if判断语句基本语法 2.2练习 2.3 else处理条件不满足的情况 2.4 练习--判断年龄改进 3 进阶 3.1elif 3.2 练习 3.3 if嵌套 3.4 ...

  2. python笔记之if语句及嵌套浅析

    if条件判断语句 语法格式: if条件: 逻辑代码 else: 其他逻辑代码 示例: day = input("今天星期几:") day = int(day) if day< ...

  3. python中if语句使用_Python学习笔记之if语句的使用示例

    前言 条件语句在实际开发中我们已经使用过几次了,在这里我们需要再次隆重的来介绍一下它,下面话不多说了,来一起看看详细的介绍吧. if语句 顾名思义,该语句为判断语句,先来一个简单的示例 cars=[' ...

  4. Python初学笔记1-【循环语句】

    Python循环语句 主要是菜鸟教程Python基础教程随学笔记,本章节是讲解Python的循环语句部分.https://www.runoob.com/python/python-loops.html ...

  5. Python学习笔记之if语句(一)

    1.if语句简单描述 在 Python中,if语句让你能够检查程序的当前状态,然后对这这种状态做对应相关的措施,如果怎样,那就怎样,示例代码如下: #if简单测试代码sexs = ['男','女']; ...

  6. 【python学习笔记】python运算符以及简单语句

    python运算符以及简单语句 1.布尔类型 bool类型的值:True 1 和 False 0 可进行四则运算 注意首字母大写 1.1比较运算 比较两个对象: • 符号:>, < =, ...

  7. Python笔记(4) 关键字

    Python笔记(4) 关键字 1. 关键字 2. True与False 3. None 4. and,or与not 5. assert 6. await与async 7. for/while,con ...

  8. Python笔记【八】

    本文为博主原创,未经许可严禁转载. 本文链接:https://blog.csdn.net/zyooooxie/article/details/108095932 Python笔记的博客 很久很久很久没 ...

  9. Python笔记(1-20)

    Python笔记(1-20) 习题等资源来源于网络,本人只是在此收集整理,如有版权问题,归小甲鱼所属.小甲鱼:https://ilovefishc.com/ 第 1 课 1.Python 是什么类型的 ...

最新文章

  1. Qt 小技巧之“To-Do 事项”
  2. 基本类型和引用类型的传值
  3. python Selenium 常见操作 元素定位
  4. 请解释为什么集合类没有实现Cloneable和Serializable接口?
  5. cors跨域_Nginx通过CORS配置实现跨域访问
  6. Android 省份城市搜索,android - 非常不错的 城市省份的选择组件: citypicker
  7. Iverson Bracket. 艾弗森括号
  8. CMU黑科技,手机录视频,实现人脸3D建模的高度逼真
  9. 实现后台高级查询(高级版)
  10. SpringBoot进阶教程 | 第四篇:整合Mybatis实现多数据源
  11. 判断是否包含某个头文件
  12. 论软件产品的易用性(二)
  13. Win10下安装python和pycharm
  14. scrapy分布式写入到mysql_scrapy-redis分布式爬虫去重异步写入mysql数据库实例代码...
  15. 3DMax2014试用结束后激活教程
  16. 阿里巴巴常用的 12 个后端开发工具,建议你快快收藏!
  17. 每日新闻:腾讯与Line携手在日本提供移动支付服务;阿里组织架构调整 行癫任阿里云智能总裁;每周要工作80小时才有可能改变世界...
  18. 计算机导论 宋斌,宋斌(计算机科学与技术学院)老师 - 南京理工大学 - 院校大全...
  19. python爬取qq音乐歌词风变编程_风变编程的Python课,让我离掌握编程又进了一步...
  20. python编程好学吗-零基础可以学会python吗?python好学吗?

热门文章

  1. 【爬虫】QQ空间照片下载
  2. C++:刷LeetCode踩过的坑
  3. 给 element-ui 表格的表头添加icon图标
  4. java char unicode_在Java的基本数据类型中,char型采用Unicode编码方案,每个Unicode码占用______字节内存空间,这样,无论是中文_搜题易...
  5. 【转载】random的常用函数
  6. CI框架学习笔记第三天
  7. frid 开发_健永科技智能盘点RFID软件接口开发
  8. 从卖咖啡到做教育,十岁的知乎“折腾”在赚钱路上
  9. 道路重建(C++,Dijkstra)
  10. 为什么说可追溯性非常重要?