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用法的详细说明相关推荐

  1. python中global 和 nonlocal 的作用域

    python引用变量的顺序: 当前作用域局部变量->外层作用域变量->当前模块中的全局变量->python内置变量 . global 一.在局部如果声明全局变量,可以对全局变量修改, ...

  2. python中global和def_Python中 Global和Nonlocal的用法详解

    nonlocal 和 global 也很容易混淆.简单记录下自己的理解. 解释 global 总之一句话,作用域是全局的,就是会修改这个变量对应地址的值. global 语句是一个声明,它适用于整个当 ...

  3. python global和nonlocal_python global和nonlocal用法解析

    python global和nonlocal用法解析 这篇文章主要介绍了python global和nonlocal用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值 ...

  4. python中divmod函数的用法_Python中divmod函数的用法

    Python中divmod函数的用法,语言,余数,是一种,面向对象,函数 Python中divmod函数的用法 Python中divmod函数的用法 在Python中divmod函数的作用是把除数和余 ...

  5. python global和nonlocal用法解析

    这篇文章主要介绍了python global和nonlocal用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 global和nonlocal ...

  6. python nonlocal的用法_python global和nonlocal用法解析

    这篇文章主要介绍了python global和nonlocal用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 ◆global和nonloca ...

  7. python中get函数是什么意思_详解python中get函数的用法(附代码)_后端开发

    strncmp函数用法详解_后端开发 strncmp函数为字符串比较函数,其函数语法为"int strncmp ( const char * str1, const char * str2, ...

  8. python中break怎么用_详解Python中break语句的用法

    详解Python中break语句的用法 在Python中的break语句终止当前循环,继续执行下一个语句,就像C语言中的break一样. break最常见的用途是当一些外部条件被触发,需要从一个循环中 ...

  9. Python关键字 global与nonlocal

    Python关键字 global与nonlocal global def test():#1函数内如果没定义x,则x默认为全局变量print(x) # 输出 global v#2函数内如果定义x,则x ...

最新文章

  1. mac镜像cdr格式_设计常用文件格式!萌新必备
  2. MIT博士用概率编程让AI和人类一样看三维|NeurIPS 2021
  3. 漫画设计模式:什么是 “装饰器模式” ?
  4. python线下培训-线下培训价值一万八的某达PYTHON培训视频
  5. day36-hibernate检索和优化 02-Hibernate检索方式:简单查询及别名查询
  6. 怎么导入字体ttf_教程小字体制作精品教程(简化版)丨精致小字体
  7. java 爬虫 保存cookies_写爬虫,免不了要研究JavaScript设置cookies的问题
  8. Android 实现九宫格、点击图片放大全屏浏览等
  9. Kafka精华问答 | kafka节点之间如何备份?
  10. Wise Package Studio介绍
  11. 如何用Pygame写游戏(七)
  12. de-emphasis
  13. 如何使用Magoshare Data Recovery在mac上恢复找回删除的丢失文件?
  14. 小米6 twrp_小米手机刷国际版欧版 MIUI 的详细教程
  15. 不是复制硅谷,而是与硅谷建立人脉
  16. 【C语言取反运算符】~2是多少?~-5是多少?
  17. python表白程序exe_表白小姐姐的Python程序
  18. RSPAN-华为二层(s2000 HI)
  19. 摄氏度和开氏度的换算_k与摄氏度的换算(摄氏度与开氏度换算)
  20. 三级管输入输出特性曲线的分析

热门文章

  1. Invalid bound statement (not found): com.lin.dao.AccountDao.findAll 解决方式之一
  2. MCU 8080规格LCD屏斜线问题——Tear功能
  3. MySQL 报错1055
  4. 在idea中如何设置项目编码为UTF-8?
  5. 华为路由器静态路由协议配置
  6. WAITED TOO LONG FOR A ROW CACHE ENQUEUE LOCK!
  7. Matlab运动模糊,维纳滤波
  8. iOS 系统方法获取当前位置经纬度
  9. cpu平均负载高的几种情况
  10. 某微型计算机指令格式如图,计算机组成原理期末复习试题2套不含答案