Python中全局变量和局部变量的理解与区别

作者:MSP_甄心cherish 时间:2022-11-13 15:35:14 

前言

学过编程的人应该对全局变量与局部变量这两个名词并不陌生,Python也同多数编程语言一样,也有全局变量与局部变量的概念

但是与其他编程语言又有所不同

全局变量与局部变量两者的本质区别就是在于作用域

用通俗的话来理解的话,

全局变量是在整个py文件中声明,全局范围内都可以访问

局部变量是在某个函数中声明的,只能在该函数中调用它,如果试图在超出范围的地方调用,程序就爆掉了

如果在函数内部定义与某个全局变量一样名称的局部变量,就可能会导致意外的效果,可能不是你期望的。因此不建议这样使用,这样会使得程序很不健全

直接来看几个例子来理解全局变量和局部变量的区别吧:

Demo1:


def fun(x):
y=2
print("乘法的运行结果:",x*y)
num1=1
print("初始num1=",num1)
fun(num1)
print("y的值是:",y)

运行结果:

Python中全局变量和局部变量的理解与区别

报错的原因是因为试图访问局部变量,但是访问的地方不在该变量y的作用域中

Demo2:


def fun():
num1=2
print("函数内修改后num1=",num1)
num1=1
print("初始num1=",num1)
fun()
print("运行完函数后num1=",num1)

运行结果:

Python中全局变量和局部变量的理解与区别

可以看到在函数内部对全局变量的修改后,在函数执行完毕,修改的结果是无效的,全局变量并不会受到影响

再看:

Demo3:


def fun():
num1*=2
print("函数内修改后num1=",num1)
num1=1
print("初始num1=",num1)
fun()
print("运行完函数后num1=",num1)

运行结果:

Python中全局变量和局部变量的理解与区别

报错了。这是因为在fun()函数使用了局部变量num1,它只是个跟全局变量同名的局部变量,使用前还是要赋值,因此再次强调不要这样使用

global关键字

如果真的想要在函数体内修改全局变量的值,就要使用global关键字

Demo4:


def fun():
global num1
num1=2
print("函数内修改后num1=",num1)
num1=1
print("初始num1=",num1)
fun()
print("运行完函数后num1=",num1)

运行结果:

Python中全局变量和局部变量的理解与区别

使用global关键字就是告诉python编译器这个变量不是局部变量而是全局变量,其实有点像是"引用"的意思

nonlocal关键字

再看看另一个跟变量相关的关键字nonlocal,字面意思就是指当前的这个变量不是局部变量。nonlocal是Python3.0中新增的关键字,python2.x不支持

先来看看下面这段代码


def fun():
num2=3
def fun2():
num2*=2
print("num2=",num2)
return fun2()

fun()

运行结果:

Python中全局变量和局部变量的理解与区别

错误的原因跟前面的差不多,就是使用了未定义的局部变量,然而num2也不是全局变量,只是fun2函数的外层变量,强行使用global定义num2的话同样会报错(不信你试试)

这时候需要使用nonlocal关键字:


def fun():
num2=3
def fun2():
nonlocal num2
num2*=2
print("num2=",num2)
return fun2()

fun()

运行结果:

Python中全局变量和局部变量的理解与区别

如此,程序就能正常执行

来源:https://blog.csdn.net/zmq570235977/article/details/48209851

标签:python,全局变量,局部变量
0
投稿

猜你喜欢

  • python中删除某个元素的方法解析

    2021-02-02 00:05:40
  • python 实现百度网盘非会员上传超过500个文件的方法

    2021-01-31 19:45:37
  • 解决PyCharm不在run输出运行结果而不是再Console里输出的问题

    2023-05-01 17:47:17
  • python安装sklearn模块的方法详解

    2023-08-01 17:23:48
  • 详解django2中关于时间处理策略

    2021-09-09 23:13:09
  • 谈切图优化加速图片显示—淘宝实例

    2008-01-30 12:24:00
  • Python中使用items()方法返回字典元素对的教程

    2023-11-20 13:07:09
  • GIt在pyCharm的详细使用教程记录

    2021-11-21 02:21:05
  • 详解python的字典及相关操作

    2023-03-28 08:52:42
  • Golang数据类型比较详解

    2023-07-17 10:11:21
  • python调用摄像头拍摄数据集

    2021-08-12 10:25:22
  • Python 命令行非阻塞输入的小例子

    2023-12-09 19:48:29
  • 浅谈django2.0 ForeignKey参数的变化

    2022-03-26 10:11:30
  • Python之os模块案例详解

    2021-06-18 15:09:38
  • ASP使用xmlhttp定时触发事件

    2008-08-19 18:09:00
  • Python生成九宫格图片的示例代码

    2023-03-16 20:29:38
  • python设置检查点简单实现代码

    2023-09-25 19:08:44
  • Oracle数据库快照的使用

    2010-07-28 13:32:00
  • asp如何获知Connection对象更多的信息?

    2009-11-23 20:53:00
  • python实现图片二值化及灰度处理方式

    2022-06-29 23:35:34
  • asp之家 网络编程 m.aspxhome.com