python的局部变量和全局变量
2018-02-28 13:09
447 查看
1.如果不是明显要局部变量和全局变量纠缠 能不纠缠就不纠缠。也就是定义变量名字的时候 要严格规范。按照开发规范来定义名字。全局大写或者加上“_”开头,这是避免不必要问题的根本 消灭问题。
2.如果实在是场景需求 局部要操作修改赋值全局变量。那就使用global。
全局变量与局部变量两者的本质区别就是在于作用域
用通俗的话来理解的话,全局变量是在整个py文件中声明,全局范围内都可以访问
局部变量是在某个函数中声明的,只能在该函数中调用它,如果试图在超出范围的地方调用,程序就爆掉了
如果在函数内部定义与某个全局变量一样名称的局部变量,就可能会导致意外的效果,可能不是你期望的。因此不建议这样
用,这样会使得程序很不健全
直接来看几个例子来理解全局变量和局部变量的区别吧:
Demo1:
def fun(x):
y=2
print("乘法的运行结果:",x*y)
num1=1
print("初始num1=",num1)
fun(num1)
print("y的值是:",y)
运行结果:
报错的原因是因为试图访问局部变量,但是访问的地方不在该变量y的作用域中 Demo2:def fun():
num1=2
print("函数内修改后num1=",num1)
num1=1
print("初始num1=",num1)
fun()
print("运行完函数后num1=",num1)
运行结果:
可以看到在函数内部对全局变量的修改后,在函数执行完毕,修改的结果是无效的,全局变量并不会受到影响再看:Demo3:def fun():
num1*=2
print("函数内修改后num1=",num1)
num1=1
print("初始num1=",num1)
fun()
print("运行完函数后num1=",num1)
运行结果:
报错了。这是因为在fun()函数使用了局部变量num1,它只是个跟全局变量同名的局部变量,使用前还是要赋值,因此再次强调不要这样使用 global关键字如果真的想要在函数体内修改全局变量的值,就要使用global关键字Demo4:def fun():
global num1
num1=2
print("函数内修改后num1=",num1)
num1=1
print("初始num1=",num1)
fun()
print("运行完函数后num1=",num1)
运行结果:
使用global关键字就是告诉python编译器这个变量不是局部变量而是全局变量,其实有点像是"引用"的意思 nonlocal关键字再看看另一个跟变量相关的关键字nonlocal,字面意思就是指当前的这个变量不是局部变量。nonlocal是Python3.0中新增的关键字,python2.x不支持先来看看下面这段代码def fun():
num2=3
def fun2():
num2*=2
print("num2=",num2)
return fun2()
fun()
运行结果:
错误的原因跟前面的差不多,就是使用了未定义的局部变量,然而num2也不是全局变量,只是fun2函数的外层变量,强行使用global定义num2的话同样会报错(不信你试试)这时候需要使用nonlocal关键字: def fun():
num2=3
def fun2():
nonlocal num2
num2*=2
print("num2=",num2)
return fun2()
fun()
运行结果:
如此,程序就能正常执行
2.如果实在是场景需求 局部要操作修改赋值全局变量。那就使用global。
全局变量与局部变量两者的本质区别就是在于作用域
用通俗的话来理解的话,全局变量是在整个py文件中声明,全局范围内都可以访问
局部变量是在某个函数中声明的,只能在该函数中调用它,如果试图在超出范围的地方调用,程序就爆掉了
如果在函数内部定义与某个全局变量一样名称的局部变量,就可能会导致意外的效果,可能不是你期望的。因此不建议这样
用,这样会使得程序很不健全
直接来看几个例子来理解全局变量和局部变量的区别吧:
Demo1:
def fun(x):
y=2
print("乘法的运行结果:",x*y)
num1=1
print("初始num1=",num1)
fun(num1)
print("y的值是:",y)
运行结果:
报错的原因是因为试图访问局部变量,但是访问的地方不在该变量y的作用域中 Demo2:def fun():
num1=2
print("函数内修改后num1=",num1)
num1=1
print("初始num1=",num1)
fun()
print("运行完函数后num1=",num1)
运行结果:
可以看到在函数内部对全局变量的修改后,在函数执行完毕,修改的结果是无效的,全局变量并不会受到影响再看:Demo3:def fun():
num1*=2
print("函数内修改后num1=",num1)
num1=1
print("初始num1=",num1)
fun()
print("运行完函数后num1=",num1)
运行结果:
报错了。这是因为在fun()函数使用了局部变量num1,它只是个跟全局变量同名的局部变量,使用前还是要赋值,因此再次强调不要这样使用 global关键字如果真的想要在函数体内修改全局变量的值,就要使用global关键字Demo4:def fun():
global num1
num1=2
print("函数内修改后num1=",num1)
num1=1
print("初始num1=",num1)
fun()
print("运行完函数后num1=",num1)
运行结果:
使用global关键字就是告诉python编译器这个变量不是局部变量而是全局变量,其实有点像是"引用"的意思 nonlocal关键字再看看另一个跟变量相关的关键字nonlocal,字面意思就是指当前的这个变量不是局部变量。nonlocal是Python3.0中新增的关键字,python2.x不支持先来看看下面这段代码def fun():
num2=3
def fun2():
num2*=2
print("num2=",num2)
return fun2()
fun()
运行结果:
错误的原因跟前面的差不多,就是使用了未定义的局部变量,然而num2也不是全局变量,只是fun2函数的外层变量,强行使用global定义num2的话同样会报错(不信你试试)这时候需要使用nonlocal关键字: def fun():
num2=3
def fun2():
nonlocal num2
num2*=2
print("num2=",num2)
return fun2()
fun()
运行结果:
如此,程序就能正常执行
相关文章推荐
- Python局部变量和全局变量
- python 学习笔记之 全局变量和局部变量
- python基础:python的局部变量和全局变量
- Python语法基础——关于全局变量与局部变量
- Python语法基础——关于全局变量与局部变量
- 兄弟连学Python(5)—局部变量和全局变量
- python全局变量-局部变量用法和区别
- Python语法基础——关于全局变量与局部变量
- python里面的全局变量和局部变量的区别小讲
- Python全局变量和局部变量
- Python函数中的局部变量和全局变量
- Python: 全局变量 & 局部变量的使用
- Python的全局变量和局部变量
- Python中全局变量和局部变量的差异性说明
- python 全局变量和局部变量
- 3.8 Python函数中的局部变量和全局变量
- python开发_python中的变量:全局变量和局部变量
- python变量总结: 全局变量、局部变量、类变量、实例变量以及global和nonlocal关键字的使用示例
- Python的局部变量和全局变量
- Python中的局部变量和全局变量