python之golbal/nonlocal
一、关键字
golbal nonlocal
在局部修改全局的变量为什么会报错
count = 0
def func():
count += 1
func()
# UnboundLocalError: local variable 'count' referenced before assignment
# 解释器认为:如果你在局部作用域对一个变量进行修改了,你在局部作用域已经定义好这个变量了。
解释器认为: 如果你在局部作用域对一个变量进行修改,name你在局部作用域已经定义好这个变量了。
1. global (***)
用途
- 可以在局部作用域申明一个全局变量
例题
def func():
global name # 用法
name = 'alex'
print(locals())
func()
# 总结
# 申明一个变量的方法:global name
- 可以在局部修改一个全局变量
例题
count = 0
def func():
global count
count += 1
print(count)
func()
print(count)
# 输出结果
0
1
总结:
# 程序从上往下执行,先定义一个局部变量count = 0,然后往下执行,到print(count),这时候count指向的还是0,到func()也就是变量名加括号,开始执行定义函数,进入函数内部,声明count为全局变量,然后对count进行修改+1,跳出函数执行print(count),这个时候count已经+1操作,结果是1
2. nonlocal (了解)
用途
- nonlocal不能操作全局变量
- nonlocal 可以对父级作用域的变量进行修改,并且在当前作用域创建
例题
def func():
count = 0
def inner():
nonlocal count
count += 1
print(count)
print(locals())
inner()
print(locals())
func()
# UnboundLocalError: local variable 'count' referenced before assignment
# 在没有申明一个nolocal的情况下,定义函数在子局部对父局部的变量进行修改也会报错,原因如下:
# 解释器认为:如果你在局部作用域对一个变量进行修改了,
# 你在局部作用域已经定义好这个变量了。
一句话总结
全局有count = 0 这个变量,或者在函数内部申明一个global count,此时在局部才可以对全局变量进行修改
# 正确的操作方法
count = 0
def func():
global count
count += 1
return count
print(func())
python之golbal/nonlocal的更多相关文章
- python global vs nonlocal (2)
上一篇中简述了这两个关键字的基本用法: global用于在局部作用于修改或重定义全局变量 nonlocal用于在内部作用域修改或重定义外部变量(全局变量除外) 这只是很浅的理解方式 注意python的 ...
- [python]global与nonlocal关键字
在Python中,当引用一个变量的时候,对这个变量的搜索是按找本地作用域(Local).嵌套作用域(Enclosing function locals).全局作用域(Global).内置作用域(bui ...
- python global和nonlocal的使用
◆global和nonlocal是Python的两个重要变量作用域关键字 1.global用在全局变量,应用场景: 变量定义在函数外部的时候,如果函数里面想改变这个全局变量的值,需要在当前的引用函数里 ...
- Python Global和Nonlocal的用法
nonlocal 和 global 也很容易混淆.简单记录下自己的理解. 解释 global 总之一句话,作用域是全局的,就是会修改这个变量对应地址的值. global 语句是一个声明,它适用于整个当 ...
- python 中的nonlocal
python 中nonloal 关键字用来在函数或其他作用域中使用外层变量(非全局),也可使用global需要在函数外部
- [Python] Symbol Review
From:http://learnpythonthehardway.org/book/ex37.html 1. with X as Y: pass 1.1 yield 2. exec 2.1 name ...
- python全栈学习--day11(函数高级应用)
一,函数名是什么? 函数名是函数的名字,本质:变量,特殊的变量. 函数名()执行此函数 ''' 在函数的执行(调用)时:打散. *可迭代对象(str,tuple,list,dict(key))每一个元 ...
- python之全局变量与局部变量
全局变量: - 在书写中顶格开始: - 一旦定义完毕在整个文件生效: - 在函数内如果定义了同名全局变量名,会“覆盖”掉全局变量: - 在函数中同名的变量,当在函数退出后消失,全局的同 ...
- 嵌套函数变量修改nonlocal & 全局变量修改global
前几天在做一个简单的界面,单击Radiobutton保存字符串,在一个嵌套函数里面修改外部函数.一直不知道怎么修改,上网查了一下,搜关键字“嵌套函数修改变量”,找了好久,才得以解决. 对于python ...
随机推荐
- Git 分支管理 多人协作 远程仓库 补充
当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了, 并且,远程仓库的默认名称是origin. 如果是本地仓库关联远程仓库 --- 要查看远程库的信息,用 ...
- window.onerror 捕捉所有的前端error
//[捕捉所有前端error] window.onerror = function (errormessage, url, line, column, error) { console.log(&qu ...
- solidity 学习笔记(4)library库
library库的申明: library SafeMath{ functrion mul(uint a,uint b) public returns (uint){ uint c= a*b; asse ...
- js框架:vue
vue是一套用于构建用户界面的渐进式框架,vue被设计为可以自底向上逐层应用,核心库只关注图层 待续.......
- jquery jtemplates.js模板渲染引擎的详细用法第一篇
jquery jtemplates.js模板渲染引擎的详细用法第一篇 Author:ching Date:2016-06-29 jTemplates是一个基于JQuery的模板引擎插件,功能强大,有了 ...
- 黑马学习MyBatis 用MyBatis对表进行条件查询 模糊查询 动态sql
package cn.itcast.domain; /* CREATE TABLE `message` ( `id` int(11) NOT NULL, `command` varchar(16) D ...
- 2017swpu-ctf总结
2017swpu-ctf总结 今年是我第一次出题感受很多,就分析几道我印象最深刻的题吧 你能进入后台吗? 这道题主要是考察php_screw还有md5加密开启true过后的注入 phpscrew加密在 ...
- HDU-2063-过山车(最大匹配)
链接:https://vjudge.net/problem/HDU-2063 题意: RPG girls今天和大家一起去游乐场玩,终于可以坐上梦寐以求的过山车了.可是,过山车的每一排只有两个座位,而且 ...
- 15 Puzzle LightOJ - 1121
https://cn.vjudge.net/problem/LightOJ-1121 #include<cstdio> #include<algorithm> #include ...
- Sonya and Matrix Beauty Codeforces - 1080E
https://codeforces.com/contest/1080/problem/E 比赛时候一个多小时码不出来... 来看遇到的困难: 1.没有能用的随机unsignedlonglong函数 ...