标签:空间 改变 pre 全局 调用 作用域 ror 维护 mil
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)) #调用函数
#该程序在运行过程中,会产生a、b、c、和add4个变量名
#a和add属于文件作用域内的全局变量,b和c是函数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