python中global和nonlocal用法的详细说明
1.前言
第一,两者的功能不同。global关键字修饰变量后标识该变量是全局变量,对该变量进行修改就是修改全局变量,而nonlocal关键字修饰变量后标识该变量是上一级函数中的局部变量,如果上一级函数中不存在该局部变量,nonlocal位置会发生错误(最上层的函数使用nonlocal修饰变量必定会报错)。
第二,两者使用的范围不同。global关键字可以用在任何地方,包括最上层函数中和嵌套函数中,即使之前未定义该变量,global修饰后也可以直接使用,而nonlocal关键字只能用于嵌套函数中,并且外层函数中定义了相应的局部变量,否则会发生错误(见第一)。
2.global关键字
1.global关键字用来在函数或其他局部作用域中使用全局变量。但是如果不修改全局变量也可以不使用global关键字。
gcount = 0def global_test():gcount+=1print (gcount)
global_test()
UnboundLocalError: local variable 'gcount' referenced before assignment
以上代码会报错:第一行定义了全局变量,在内部函数中又对外部函数进行了引用并修改,那么python会认为它是一个局部变量,有因为内部函数没有对其gcount进行定义和赋值,所以报错。
2.如果局部要对全局变量修改,则在局部声明该全局变量。
gcount = 0def global_test():global gcountgcount+=1print (gcount)
global_test()
1
3.如果局部不声明全局变量,并且不修改全局变量,则可以正常使用。
gcount = 0def global_test():print (gcount)
global_test()
0
3. nonlocal关键字
1.nonlocal声明的变量不是局部变量,也不是全局变量,而是外部嵌套函数内的变量。
def make_counter():count = 0def counter():nonlocal countcount += 1return countreturn counterdef make_counter_test():mc = make_counter()print(mc())print(mc())print(mc())make_counter_test()
1
2
3
4. global和nonlocal混合使用
def scope_test():def do_local():spam = "local spam" #此函数定义了另外的一个spam字符串变量,并且生命周期只在此函数内。此处的spam和外层的spam是两个变量,如果写出spam = spam + “local spam” 会报错def do_nonlocal():nonlocal spam #使用外层的spam变量spam = "nonlocal spam"def do_global():global spamspam = "global spam"spam = "test spam"do_local()print("After local assignmane:", spam)do_nonlocal()print("After nonlocal assignment:",spam)do_global()print("After global assignment:",spam)scope_test()
print("In global scope:",spam)
After local assignment: test spam
After nonlocal assignment: nonlocal spam
After global assignment: nonlocal spam
In global scope: global spam
参考
python中global和nonlocal用法的详细说明 https://www.cnblogs.com/yuzhanhong/p/9183161.html
python中global和nonlocal用法的详细说明相关推荐
- python中global 和 nonlocal 的作用域
python引用变量的顺序: 当前作用域局部变量->外层作用域变量->当前模块中的全局变量->python内置变量 . global 一.在局部如果声明全局变量,可以对全局变量修改, ...
- python中global和def_Python中 Global和Nonlocal的用法详解
nonlocal 和 global 也很容易混淆.简单记录下自己的理解. 解释 global 总之一句话,作用域是全局的,就是会修改这个变量对应地址的值. global 语句是一个声明,它适用于整个当 ...
- python global和nonlocal_python global和nonlocal用法解析
python global和nonlocal用法解析 这篇文章主要介绍了python global和nonlocal用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值 ...
- python中divmod函数的用法_Python中divmod函数的用法
Python中divmod函数的用法,语言,余数,是一种,面向对象,函数 Python中divmod函数的用法 Python中divmod函数的用法 在Python中divmod函数的作用是把除数和余 ...
- python global和nonlocal用法解析
这篇文章主要介绍了python global和nonlocal用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 global和nonlocal ...
- python nonlocal的用法_python global和nonlocal用法解析
这篇文章主要介绍了python global和nonlocal用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 ◆global和nonloca ...
- python中get函数是什么意思_详解python中get函数的用法(附代码)_后端开发
strncmp函数用法详解_后端开发 strncmp函数为字符串比较函数,其函数语法为"int strncmp ( const char * str1, const char * str2, ...
- python中break怎么用_详解Python中break语句的用法
详解Python中break语句的用法 在Python中的break语句终止当前循环,继续执行下一个语句,就像C语言中的break一样. break最常见的用途是当一些外部条件被触发,需要从一个循环中 ...
- Python关键字 global与nonlocal
Python关键字 global与nonlocal global def test():#1函数内如果没定义x,则x默认为全局变量print(x) # 输出 global v#2函数内如果定义x,则x ...
最新文章
- mac镜像cdr格式_设计常用文件格式!萌新必备
- MIT博士用概率编程让AI和人类一样看三维|NeurIPS 2021
- 漫画设计模式:什么是 “装饰器模式” ?
- python线下培训-线下培训价值一万八的某达PYTHON培训视频
- day36-hibernate检索和优化 02-Hibernate检索方式:简单查询及别名查询
- 怎么导入字体ttf_教程小字体制作精品教程(简化版)丨精致小字体
- java 爬虫 保存cookies_写爬虫,免不了要研究JavaScript设置cookies的问题
- Android 实现九宫格、点击图片放大全屏浏览等
- Kafka精华问答 | kafka节点之间如何备份?
- Wise Package Studio介绍
- 如何用Pygame写游戏(七)
- de-emphasis
- 如何使用Magoshare Data Recovery在mac上恢复找回删除的丢失文件?
- 小米6 twrp_小米手机刷国际版欧版 MIUI 的详细教程
- 不是复制硅谷,而是与硅谷建立人脉
- 【C语言取反运算符】~2是多少?~-5是多少?
- python表白程序exe_表白小姐姐的Python程序
- RSPAN-华为二层(s2000 HI)
- 摄氏度和开氏度的换算_k与摄氏度的换算(摄氏度与开氏度换算)
- 三级管输入输出特性曲线的分析
热门文章
- Invalid bound statement (not found): com.lin.dao.AccountDao.findAll 解决方式之一
- MCU 8080规格LCD屏斜线问题——Tear功能
- MySQL 报错1055
- 在idea中如何设置项目编码为UTF-8?
- 华为路由器静态路由协议配置
- WAITED TOO LONG FOR A ROW CACHE ENQUEUE LOCK!
- Matlab运动模糊,维纳滤波
- iOS 系统方法获取当前位置经纬度
- cpu平均负载高的几种情况
- 某微型计算机指令格式如图,计算机组成原理期末复习试题2套不含答案