Python变量作用域

时间:2021-04-08 13:49:27   收藏:0   阅读:0
if __name__ =="__main__":
#变量作用域

#变量作用域就是变量的可访问范围,也称为命名空间。
#在第一次给变量赋值时,Python创建变量。
#第一次给变量赋值的位置决定了变量的作用域。

#有哪些作用域:
#一个程序通常包含了变量、函数和其他的各种语句,变量和函数涉及可访问范围。
#一个程序中的变量和函数要么是在当前文件中定义要么是Python提前预定义好的。
#函数和程序文件啊划分了不同的作用域。在同一个作用域中哦,变量名是唯一的。
#在不用作用域中,相同的变量名也表示了不同的变量!!!!
#Python作用域可分为:
#内置作用域:最顶层,包含了Python各种预定义变量和函数的作用域
#文件作用域:程序文件(也称为模块文件)的内部为文件作用域
#函数嵌套作用域:包含了其他函数定义的函数的内部
#本地作用域:不包含其他函数定义的函数的内部称为本地作用域。
#函数内部通过赋值创建变量,函数参数都属于本地作用域

#作用域内部可以使用作用域外部的变量和函数
#作用域内部的变量和函数不能在作用域外部使用

#文件作用域
a=10 #a是全局变量
def add(b): #参数b是函数add内的本地变量
c = a + b #c是函数add内的本地变量,a是函数外部的全局变量
return c
print(add(5)) #调用函数
#该程序在运行过程中,会产生abc、和add4个变量名
#aadd属于文件作用域内的全局变量,bc是函数add内部的本地变量
#另外还使用了print这个内置函数

#函数内部的本地变量,在调用函数时(函数执行期间)才会被创建。
#函数执行结束,本地变量也会从内存删除。
#def是一条可执行语句,它创建了一个函数对象赋值给函数名变量。

#作用域外的变量与作用域内的变量名称相同时,遵循本地优先原则,
#此时外部作用域被屏蔽——称为作用域隔离原则。
a = 10 #赋值创建全局变量a
def show():
a = 100 #赋值创建本地变量a
print("in show():a=",a)
show() #本地变量屏蔽了全局变量
print("a=",a)

#
‘‘‘
a=10
def show():
print(‘a=‘,a)
a=100
print(‘a=‘,a)
show()
‘‘‘
#在函数show()中先打印a的值,因为后面有赋值语句
#Python将函数内部的a都作为本地变量,所以在调用函数时会出现错误
‘‘‘
UnboundLocalError: local variable ‘a‘ referenced before assignment
‘‘‘
#提示本地变量a使用之前没有赋值!

#global 语句
print("global语句:")
a = 10
def show():
global a
print(‘a=‘,a)
a=100
print(‘a=‘,a)
show()
#内部使用了global语句进行声明,所以代码中使用到的a都是全局变量a.
#软工角度:在函数内部使用global语句使得在函数内部可以修改全局变量的值,
#这种方式降低了软件的质量,使程序的调试、维护变得困难,
#因此不提倡在函数中修改全局变量或函数参中的可修改变量

#nonlocal 语句
#作用域隔离原则同样适用于函数内部的嵌套函数。
#在嵌套函数内试用与上层函数本地变量同名的变量时,
#若该变量没有赋值,则该变量就是上层函数的本地变量。
def test():
b=10 #创建test函数的本地变量b
def show():
print(‘in show(),b=‘,b) #使用test函数的本地变量b
show()
print(‘in test(),b=‘,b) #使用test函数的本地变量b
test()

#
def test():
b=10 #创建test函数的本地变量b
def show():
b=100 #创建show函数的本地变量b
print(‘in show(),b=‘,b) #使用show函数的本地变量b
show()
print(‘in test(),b=‘,b) #使用test函数的本地变量b
test()
#可以看出,在嵌套函数内为变量赋值时,即使有同名的外部变量,也默认创建一个本地变量
#如果要在嵌套函数内部修改外部本地变量,可以使用nonlocal语句
#nonlocal语句与global语句类似,它声明变量是外部的本地变量

def test():
a=15 #创建test函数的本地变量a
def show():
nonlocal a #声明atest函数的本地变量a
a=111 #修改test函数的本地变量a
print(‘in show(),a=‘,a) #使用test函数的本地变量a
show()
print(‘in test(),a=‘,a) #使用test函数的本地变量a
test()


评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2
迷上了代码!