python系列教程189——global和nonlocal
Posted 人工智能AI技术
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python系列教程189——global和nonlocal相关的知识,希望对你有一定的参考价值。
朋友们,如需转载请标明出处:https://blog.csdn.net/jiangjunshow
声明:在人工智能技术教学期间,不少学生向我提一些python相关的问题,所以为了让同学们掌握更多扩展知识更好地理解AI技术,我让助理负责分享这套python系列教程,希望能帮到大家!由于这套python教程不是由我所写,所以不如我的AI技术教学风趣幽默,学起来比较枯燥;但它的知识点还是讲到位的了,也值得阅读!想要学习AI技术的同学可以点击跳转到我的教学网站。PS:看不懂本篇文章的同学请先看前面的文章,循序渐进每天学一点就不会觉得难了!
1、global的作用
global的作用就是将变量声明为全局变量
这个问题在面试中非常常见,经常会有面试官问,如下代码打印结果是啥
var=10
def func():
var=var+20
print("inner:",var)
print(var)
func()
print(var)
分析:其实这段代码真正执行的时候是会报错的,提示在第三行的位置var未定义,这是因为第一行定义的var为全局变量,而在第三行中=右侧的var为局部变量,此变量在函数局部内确实未定义,这就是这段代码报错的原因,解决这个问题的方法就是在第三行代码之前,用global关键将var声明为全局变量
如下:
var=10
def func():
global var
var=var+20
print("inner:",var)
print(var)
func()
print(var)
执行结果如下:
10
inner: 30
30
这里需要记住的一个关键点是,全局变量在函数局部区域内,不能出现在赋值符号=的右侧,但是如果没有赋值符号,比如直接打印,这时又是可见的,如下:
var=10
def func():
print("inner:",var)
print(var)
func()
print(var)
执行结果为:
10
inner: 10
10
如果在函数局部区域内对和全局变量同名的变量重新赋值时,注意此时赋值的并不是全局变量,而是一个全新的局部变量,而全局变量并未发生变化,如下:
var=10
def func():
var=20
print("inner:",var)
print(var)
func()
print(var)
此时执行结果为:
10
inner: 20
10
2、nonlocal的作用
nonlocal的作用是声明既不是全局变量,也不是局部变量
如下代码,虽然使用global声明var,但是代码还是报错的,这是因为这里的var变量并不是全局变量,同时在最内层函数中也不是局部变量,在这种情况下就需要nonlocal关键字类声明
def outer():
var=10
def inner():
global var
var=var+20
print("in inner:",var)
print(var)
inner()
print(var)
outer()
如下代码:使用nonlocal声明之后,就可以正常执行了,这就是nonlocal关键字的作用
def outer():
var=10
def inner():
nonlocal var
var=var+20
print("in inner:",var)
print(var)
inner()
print(var)
outer()
执行结果如下:
10
in inner: 30
30
以上是关于python系列教程189——global和nonlocal的主要内容,如果未能解决你的问题,请参考以下文章
python随笔系列--global和nonlocal关键字
翻译自mos文章关于分区索引:Global, Local, Prefixed and Non-Prefixed
mysql error:@@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1,updates to non-transactional tables can only be do