局部变量和全局变量
一、基础
在子程序中定义的变量称为局部变量,在程序一开始定义的变量称为全局变量。
例1:
name = "qwer"
def change_name() :
name = "asd"
print('change_name',name)
change_name()
print(name)
输出结果:
change_name asd
qwer
同样是输出name,为什么两个不一样呢?这是因为函数里面的name是局部变量,开始定义的name是全局变量,局部变量只在函数里面生效,最后一行输出的name输出的是全局变量
下面我们用一张图来表明全局变量和局部变量两者之间的关系:
由上图我们可以看出,局部变量存在私密空间内;而全局变量则是所有人都可以拿到的东西。
要是我们想把局部变量变为全局变量,或者在函数内直接影响到全局变量,我们可以使用golbal质量
name = "qwer"
def change_name() :
golbal name = "asd"
print('change_name',name)
change_name()
print(name)
输出结果:
change_name asd
asd
由上面的例子我们可以得出,如果函数的内容无golbal关键字,我们只能读取全局变量,无法重新赋值
如果函数中有golbal关键字,变量本质上就是全局的那个变量,可读取可赋值
为了方便区分,全局变量可用大写,局部变量可用小写
二、判断运行顺序
通过全局变量和局部变量的学习,可以用这些判断函数运行顺序
例1:
NAME = "ZF"
def shunxu1() :
name = "zhaoyun"
print(name)
def shunxu2():
name = "zhangfei"
print(name)
def shunxu3():
name ="liubei"
print(name)
def shunxu4():
name = "lvbu"
print(name)
shunxu4()
print(name)
shunxu3()
print(name)
shunxu2()
print(name)
shunxu1()
输出结果:
zhaoyun
zhangfei
liubei
lvbu
liubei
zhangfei
zhaoyun
为上面的函数运行顺序标号,1、2、3…,结果如下:
NAME = “ZF” 1
def shunxu1() :
name = “zhaoyun” 3
print(name) 4
def shunxu2():
name = “zhangfei” 6
print(name) 7
def shunxu3():
name =“liubei” 9
print(name) 10
def shunxu4():
name = “lvbu” 12
print(name) 13
shunxu4() 11
print(name) 12
shunxu3() 8
print(name) 13
shunxu2() 5
print(name) 14
shunxu1() 2
里面每个name是哪个,请读者自行体会
三、风湿理论之函数即变量
例1:def foo():
print('from foo')
bar()
报错,原因:bar函数未定义
例2:def foo():
print('from foo')
bar()
def bar():
print('from bar')
输入:foo()
结果:from foo
from bar
例3: def bar():
print('from bar')
def foo():
print('from foo')
bar()
输入:foo()
结果:from foo
from bar
例4: def foo():
print('from foo')
bar()
def bar():
print('from bar')
输入:foo()
报错,在foo函数运行时,bar函数未进行定义,或者说,在foo函数运行时,bar函数在内存中没有加载好
当我们运行一个函数时,内存是如何处理的呢?,下面我用一张图说明这个问题
风湿理论之函数即变量:类似函数的赋值操作,把这个函数里面所有的代码都当成普通的字符串,放入内存中