1.定义
局部变量:在函数中定义的变量一般只能在该函数内部使用,这些只能在程序的特定部分使用
全局变量:在一个文件顶部定义的变量,可以供该文件中任意函数调用
全局变量与局部变量两者的本质区别就是在于作用域。全局变量是在整个py文件中声明,全局范围内都可以访问。局部变量是在某个函数中声明的,只能在该函数中调用它,如果试图在超出范围的地方调用,程序就爆掉了
如果在函数内部定义与某个全局变量一样名称的局部变量,就可能会导致意外的效果,可能不是你期望的。因此不建议这样使用,这样会使得程序很不健全
2.实例
2.1 优先读取局部变量,能读取全局变量,无法对全局变量重新赋值
name='全局变量'
def change_name():
name='局部变量'
print('change_name',name)
change_name()
print(name)
输出:
chang_name 局部变量
全局变量
2.2global语句可以把局部变量强制生成全局变量,如果函数没有被调用的话 global是没有用的
NAME = "xixi"
def s1():
global NAME #已经声明,NAME就是全局的那个变量xixi
NAME = "yueyue" #修改全局的变量为yueyue
print('打印出', NAME)
def s2():
print('打印出', NAME)
s1()
s2()
输出:
打印出 yueyue
打印出 yueyue
2.3 对于可变类型,可以对内部元素进行操作
NAME = ["wangwang","shishi"]
def s1():
NAME.append('yaoyao')
print('打印出', NAME)
s1()
打印出 ['wangwang', 'shishi', 'yaoyao']
######## 全局变量变量名大写
######## 局部变量变量名小写
2.4 函数跟函数之间嵌套变量
NAME = '全局变量' #第一步执行
def s1():
name = "嵌套1" #第三步执行
print(name) #第四步执行(输出第一行)
def s2():
name = "嵌套2" #第六步执行
print(name) #第七步执行(输出第二行)
def s3():
name = '嵌套3' #第十步执行
print(name) #第十一步执行(输出第四行)
print(name) #第八步执行(输出第三行)
s3() #第九步执行
s2() #第五步执行
print(name) #第十二步执行(输出第五行)
s1() #第二步执行
复制代码
输出:
嵌套1
嵌套2
嵌套2
嵌套3
嵌套1
2.5 nonlocal指定上一级变量,如果没有就继续往上直到找到为止
name = "全局变量"
def s1():
name = "西西"
def ss1():
nonlocal name #把上一级变量name=西西改为name=月月
name = "月月"
ss1()
print(name)
print(name)
s1()
print(name)
输出:
全局变量
月月
全局变量
2.6 属性拆分详解
name = '全局变量' #第1步执行
def s1(): #第2步执行
name = "嵌套1" #第4.1步执行
print(name) #第4.2步执行(输出第二行)
def s2(): #第4.3步执行
name = "嵌套2" #第4.4.1步执行
print(name) #第4.4.2步执行(输出第三行)
def s3(): #第4.4.3步执行
name = '嵌套3' #第4.4.5.1步执行执行
print(name) #第4.4.5.2步执行(输出第五行)
print(name) #第4.4.4步执行(输出第四行)
s3() #第第4.4.5步执行步执行
s2() #第4.4步执行
print(name) #第4.5步执行(输出第六行)
print(name) #第3步执行(输出第一行)
s1() #第4步执行
print(name) #第5步执行(输出第七
输出:
全局变量
嵌套1
嵌套2
嵌套2
嵌套3
嵌套1
全局变量