python变量与作用域

2023-12-13 5:45:12网络知识匿名
B的顺序进行查找,即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内建中找。

说明:Python除了def/class/lambda外,其他如:if/elif/else/try/exceptfor/while并不能改变其作用域。定义在它们之内的变量,外部还是可以访问。

3.全局变量与局部变量

一个程序中的变量是有作用域(scope)的,作用域的大小会限制变量可访问的范围。Python中的变量根据作用域范围的大小不同可以分为:全局变量和局部变量。顾名思义,全局变量表示变量在全局范围内都可以被访问,而局部变量只能在一个很小的范围内生效。这就好比国家主席与各省的省长:在全国范围内国家主席都是同一个人,因此国家主席就是个全局变量;而各省的省长只能在某个省内生效,河北省省长是一个人,河南省省长又是另外一个人,因此省长就是个局部变量。对于Python编程语言而言,定义在一个函数内部的变量就是一个局部变量,局部变量只能在其被声明的函数内访问;定义在函数外部的变量就是全局变量,全局变量可以在整个程序范围内访问。

来看个示例:

#!/usr/bin/envpython

#-*-encoding:utf-8-*-

name='Tom'

deffunc1():

age=10

print(name)

print(age)

deffunc2():

sex='F'

print(name)

print(sex)

print(name)

func1()

func2()

输出结果:

Tom

Tom

10

Tom

F

上面的示例中,name是一个全局变量,因此它在程序的任何地方都可以被访问;而func1函数中的age变量和func2函数中的sex变量都是局部变量,因此它们只能在各自定义的函数中被访问。

问题1:如果在函数内定义一个与全局变量同名的变量会怎样?

#!/usr/bin/envpython

#-*-encoding:utf-8-*-

name='Tom'

deffunc3():

name='Jerry'

print(name)

print(name)

func3()

print(name)

输出结果:

Tom

Jerry

Tom

通过上面两个示例的输出结果我们可以得出这样的结论:

函数内引用一个变量时,会先查找该函数内部是否存在这样一个局部变量,如果存在则直接引用该局部变量,否则将查找并引用全局变量;

对局部变量的赋值并不会对全局变量产生什么影响,因为它们本来就是两个不相关的变量。

问题2:如果想在上面示例中的函数内部为全局变量重新赋值怎么办?

可以在函数内部通过global关键字声明该局部变量就是全局变量:

#!/usr/bin/envpython

#-*-encoding:utf-8-*-

name='Tom'

deffunc4():

globalname

name='Jerry'

print(name)

print(name)

func4()

print(name)

输出结果:

Tom

Jerry

Jerry

可见全局name的值的确被func4函数内部的操作改变了。

问题3:能不能将全局变量通过传参的方式传递给函数,然后在函数内部对全局变量做修改呢?

变量值的改变通常有两种方式:(1)重新赋值(2)改变原有值。要想在函数内部通过重新赋值来改变全局变量的值,则只能通过上面介绍的使用global关键字来完成,通过传参是无法实现的。而要想在函数内部改变全局变量的原有值的属性就要看该参数是值传递还是引用传递了,如果是引用传递则可以在函数内部对全局变量的值进行修改,如果是值传递则不可以实现。具体请看下面的分析。

以上内容为大家介绍了python变量与作用域,希望对大家有所帮助,如果想要了解更多Python相关知识,请关注IT培训机构:瀚银百科。

发表评论:

最近发表
随机文章