Python变量的作用域不由变量所在源代码中的位置决定,python关于变量的作用域下列说法错误的
大家好,本文主要讲一下Python中变量作用域的详细解释。有兴趣的同学过来看看,如果对你有帮助记得收藏。
00-1010 1.动作概念2、局部变量3、全局变量4、变量搜索5、作用域内的可变数据类型变量6、多功能程序执行过程总结。
目录
变量作用域是指变量生效的作用域。Python中有两个作用域。
全局作用域
全局作用域在程序执行时创建,在程序执行结束时销毁。函数之外的所有区域都是全局范围。全局作用域中定义的变量属于全局变量,可以在程序的任何地方访问。
函数作用域
函数作用域是在调用函数时创建的,并在调用结束时销毁。每次调用一个函数,都会产生一个新的函数作用域(不调用,不生成)。函数作用域中定义的变量都是局部变量,只能在函数内部访问。
1、作用于的概念
所谓局部变量,就是定义在函数体内部的变量,也就是只在函数体内部生效。
def testA():
#局部变量a
#给函数中的变量赋值时,默认是给局部变量赋值。
#局部变量不会影响函数外部的变量。
a=100
#内部访问函数体,可以访问变量A
打印(一份)
testA() # 100
Print(a) #错误:未定义名称“a”
testA函数内部定义了一个变量,在函数外部访问时会立即报告错误。
局部变量的函数:在函数体中,临时保存数据,即函数调用完成时,销毁局部变量。
2、局部变量
所谓全局变量是指在函数内部和外部都可以生效的变量。
思考:如果有一块数据要在函数A和函数B中同时使用,该怎么办?
答:将这些数据存储在一个全局变量中。
#定义全局变量a
a=100
def testA():
Print(a) #访问全局变量A并打印存储在变量A中的数据。
def testB():
Print(a) #访问全局变量A并打印存储在变量A中的数据。
testA() # 100
testB() # 100
思考:testB函数要求将变量A的值修改为200。如何修改程序?
a=100
def testA():
打印(一份)
def testB():
a=200
打印(一份)
testA() # 100
testB() # 200
Print(f 全局变量a={a}) #全局变量a=100
思考:testB函数内部a=200中的变量A是否在修改全局变量A?
答:不是,观察上面的代码,发现15行中得到的A的数据是100,这还是定义全局变量A时的值,只是没有返回。
testB函数中的200。综上:testB函数中a=200定义了一个局部变量。
(1)全局关键字
思考:如何修改函数体内部的全局变量?
a=100
def testA():
打印(一份)
def testB():
#要修改的全局变量A的值是200
# global关键字声明A是一个全局变量。
全球a
a=200
打印(一份)
testA() # 100
testB() # 200
Print(f 全局变量a={a}) #全局变量a=200
global关键字用于将变量声明为函数中的全局变量。换句话说,如果您想要修改函数内部的全局变量,您需要使用global关键字来
声明变量。
(2)总结
如果在函数里面直接把变量a=200赋值,此时的a
不是全局变量的修改,而是相当于在函数内部声明了一个新的局部变量。函数体内部修改全局变量: 先global
声明a
为全局变量,然后再变量重新赋值。
4、变量的查找
当我们使用变量时,会优先在当前作用域中寻找该变量,如果有则使用,
如果没有则继续去上一级作用域中寻找,如果有则使用,
如果依然没有则继续去上一级作用域中寻找,以此类推。
直到找到全局作用域,依然没有找到,则会抛出异常 NameError: name 'a' is not defined
。
# 练习说明a = 10
def fn2():
def fn3():
a = 30
print(fn3中:,a =,a)
fn3()
print(fn2中:,a =,a)
fn2()
"""
输出结果:
fn3中: a = 30
fn2中: a = 10
"""
5、作用域中可变数据类型变量
c = 10def fn4(a):
# 在函数中对形参进行重新赋值,不会影响其他的变量
a = 20
print(a =, a, id(a))
fn4(c)
print(c =, c, id(c))
"""
输出结果:
a = 20 8791349231264
c = 10 8791349230944
"""
# 如果形参接收到的数据是一个全局列表
# 当在函数内尝试修改列表中的元素时,全局列表的数据也会发生改变
c = [1,2,3]
def fn4(a):
# 如果形参执行的是一个对象,当我们通过形参去修改对象时
# 会影响到所有指向该对象的变量
a[0] = 100
print(a =, a, id(a))
fn4(c)
print(c =, c, id(c))
"""
输出结果:
a = [100, 2, 3] 5132808
c = [100, 2, 3] 5132808
"""
# 如果我们不向全局变量有所改动
# 就需要使用我们之前学过的浅复制,
# 或者传入一个切片,就可以解决
c = [1, 2, 3]
def fn4(a):
# 在函数中对形参进行重新赋值,不会影响其他的变量
a[0] = 100
print(a =, a, id(a))
fn4(c.copy())
# fn4(c[:])
print(c =, c, id(c))
"""
输出结果:
a = [100, 2, 3] 6050824
c = [1, 2, 3] 6050312
"""
6、多函数程序执行流程
一般在实际开发过程中,一个程序往往由多个函数组成,并且多个函数共享某些数据,如下所示:
(1)共用全局变量
# 1. 定义全局变量glo_num = 0
def test1():
global glo_num
# 修改全局变量
glo_num = 100
def test2():
# 调用test1函数中修改后的全局变量
print(glo_num)
# 2. 调用test1函数,执行函数内部代码:声明和修改全局变量
test1()
# 3. 调用test2函数,执行函数内部代码:打印
test2() # 100
(2)返回值作为参数传递
# 先得到函数一的返回值,再把这个返回值传入到函数二def test1():
return 50
def test2(num):
print(num)
# 1. 保存函数test1的返回值
result = test1()
# 2.将函数返回值所在变量作为参数传递到test2函数
test2(result) # 50
总结
到此这篇关于Python中变量的作用域详解的文章就介绍到这了,更多相关Python变量的作用域内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。