python变量的作用域:局部和全局变量

2022-07-2920:51:07编程语言入门到精通Comments1,030 views字数 1984阅读模式

变量的作用域值的是一个变量能够有效的区域,因为我们在使用函数的时候,有的变量是在主程序中定义的,有的是在调用的函数中定义的,当我们的主程序使用函数中定义的变量时,就会出现异常。下面来介绍一下局部变量和全局变量。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26211.html

1. 局部变量文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26211.html

局部变量,顾名思义,就是作用在局部区域的变量,如果是在函数中定义的变量,那么就只在函数中起作用,如果在函数外部使用函数内部的变量,就会出现异常。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26211.html

看下面的例子:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26211.html

1
2
3
4
5
def test():
    data = '局部变量'
    print('在函数内部输出data为:',data)
test()
print('在主程序中输出data:',data)

输出结果为:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26211.html

1
2
3
4
5
在函数内部输出data为: 局部变量
Traceback (most recent call last):
  File "C:/Users/轻烟/PycharmProjects/untitled/venv/Include/ts.py", line 6in <module>
    print('在主程序中输出data:',data)
NameError: name 'data' is not defined

由于变量data是在函数内部定义的,我们在主程序中使用变量data则会出现访问的变量不存在的问题,所以我们要注意在函数内部定义的变量为局部变量,未作特别声明的话是不可以在函数外使用的。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26211.html

2. 全局变量文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26211.html

全局变量我们也可以从字面意思中理解到它就是作用在全局的变量,有的同学可能自然而然的认为那么全局变量一定是定义在主程序中的变量了,其实全局变量也是可以作用在函数中的,在这里我们来介绍两种全局变量的使用方式:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26211.html

1) 在主程序中定义全局变量。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26211.html

我们在主程序中定义的变量的作用域是全局的,我们在定义的函数中也是可以直接使用这些变量,看下面的例子:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26211.html

1
2
3
4
5
data = '全局变量data'
def test():
    print('这是作用在函数中的全局变量:',data)
test()
print('这是作用在函数外的全局变量:',data)

输出结果:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26211.html

1
2
这是作用在函数中的全局变量: 全局变量data
这是作用在函数外的全局变量: 全局变量data

这种方式就是我们通常情况下使用的全局变量,我们在主程序中定义的变量可以在函数内部直接的进行使用。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26211.html

2) 使用global关键字文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26211.html

我们在函数内定义的变量也可以编程全局变量,这时候我们就要使用到global关键字。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26211.html

首先我们先看一下当全局变量和局部变量的名字相同的时候会是一个怎么样的情况,看下面的例子:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26211.html

1
2
3
4
5
6
7
data = '这里是全局变量data'
print(data)
def test():
    data = '这里是局部变量data'
    print(data)
test()
print('再检查一下全局变量data:',data)

输出结果为:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26211.html

1
2
3
这里是全局变量data
这里是局部变量data
再检查一下全局变量data: 这里是全局变量data

通过这里例子我们可以看出全局变量和局部变量的命名相同的时候是不影响全局变量的内容的,但是如果我们想要在函数中修改全局变量的值,那么我们就要使用global关键字。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26211.html

再看下面的例子:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26211.html

1
2
3
4
5
6
7
8
data = '这里是全局变量data'
print(data)
def test():
    global data
    data = '这里是局部变量data'
    print(data)
test()
print('再检查一下全局变量data:',data)

输出结果为:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26211.html

1
2
3
这里是全局变量data
这里是局部变量data
再检查一下全局变量data: 这里是局部变量data

通过global关键字,在局部中声明告诉这个函数global是一个全局变量,那么修改了之后,全局中的变量都做了修改,global关键字就是可以使一个变量变成全局变量。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26211.html

当全局中没有声明变量的时候,我们在局部中也可以使用global关键字直接来声明一个变量是全局变量,那么我们在函数中定义的变量在主程序中也是可以使用的,看下面的例子:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26211.html

1
2
3
4
5
6
def test():
    global data
    data = '这是在局部创建的变量data'
    print('这是在函数中输出:',data)
test()
print('这是在主程序中输出:',data)

输出为:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26211.html

1
2
这是在函数中输出: 这是在局部创建的变量data
这是在主程序中输出: 这是在局部创建的变量data

3. 总结文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26211.html

通过上面的例子我们可以了解到global关键字在控制全局变量时候的作用,另外要注意在写程序的时候尽量避免全局变量和局部变量的名字一致,尽管他们作用于不同的区域,但是会影响对代码的理解。本节就讲到这里,下一节我们来学习匿名函数。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26211.html

  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/ymba/26211.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定