全局变量定义:
在函数外部定义的变量。所有函数内部都可以使用这个变量。
局部变量定义:
在函数内部定义的变量。这个变量只能在定义这个变量的函数内部使用。
第一种:global定义全局变量在自定义函数内部
定义看起来一愣一愣的,没关系我也是。我将会用实例的方式为你解释。我们也知道在Python中有一个global关键字用来声明一个全局变量。那这玩意儿到底什么用。来看看
def first():
global key
key="first()的key"
print("进入first函数,给key赋新值,此时print(key)得到***"+key+"***\n")
def second():
print("进入second函数,但是没有给key赋新值,此时print(key)得到***"+key+"***\n")
def third():
key="third()的key"
print("进入third函数,给key赋新值,此时print(key)得到***"+key+"***\n")
first()
second()
third()
******最后的到运行结果如下******
结论:上面例子说明了 global 定义 全局变量,用在 自定义函数 的时候,是在 所有自定义函数 内部 通用的 变量。而在全局中,它并不存在。。
(但是要注意,这个global key是在函数内部定义的,没有在全局内定义,所以,如果你在上面我写的代码后面在加一个print(key)的话,会爆出“key未定义”的警告。)
**********************分割线***************************
第二种:全局定义全局变量,并给其赋值。
(注:在全局内写“key="值"相当于在全局内写“global key
key="值"”)
key="全局内定义,并赋值的全局变量key"
def first():
key="first()局部新定义的“全局key“"
print("进入first函数,key的值为***"+key+"***\n")
def second():
print("进入second函数,在second函数内部,不赋给key新值,引用first()函数后的key为***"+key+"***\n")
print("没有引用first()函数时的key为***"+key+"***\n")#为了先print出key的全局内定义的 全局变量值
first()#first()函数内部对全局内定义的 全局变量key 进行了赋值。实质上是在first()内部定义了一个局部变量
second()#验证这个 first()内部定义的局部变量会不会影响到second()中的key。(就像第一种global key那样。结论当然是否定的。但我们这里验证一下,消除一下读者的疑问)
print("引用first()函数后的key为***"+key+"***\n")#验证在 first()定义了一个局部变量之后,会不会影响到全局内的全局变量key。(答案当然也是否定的,这里这一步也是为了消除读者的疑问)
********运行结果如下********
可见,以上例子中。first()内定义了一个局部变量,然后出了这个first()函数以后,这个变量便消失,不可再用。同时也体现了“局部变量>全局变量”的优先级关系。
结论:在全局 定义 全局变量 key 后,自定义函数 内部 再对这个 key 进行定义 的时候,就是定义了 key局部变量,出了这个 自定义函数,便不可再用。下一个自定义函数 只能用 全局变量key 了。
**********************分割线***************************
第三种:前两种的混用
key="全局内定义,并赋值的全局变量key"
def first():
key="first()局部新定义的“全局key“"
print("进入first函数,key的值为***"+key+"***\n")
def second():
print("进入second函数,在second函数内部,不赋给key新值,引用first()函数后的key为***"+key+"***\n")
def third():
global key
key="third()新定义的自定义函数内部通用global key"
print("进入third函数,在third函数内部,赋给key新值,且为global,引用third()后的key为***"+key+"***\n")
print("没有引用first()函数时的key为***"+key+"***\n")#与第二种的这个位置的作用一样
first()#与第二种的这个位置的作用一样
second()#与第二种的这个位置的作用一样
third()#由于我们给third()内部定义了一个global key,探测一下等下再调用second()的时候会不会使其变成自定义函数内部通用的“全局变量”,即 第一种 的结论。
second()#见上一步解释(经验证,即输出结果,上一步的猜测是正确的)
print("引用third()函数后的,全局内的key为***"+key+"***\n")#探测一下自定义函数内部global key会不会影响 全局内的key。(答案当然是否定的,就是为了消除一下读者的疑问,证明一下结论的严谨性)
********运行结果如下********
因此,我们严谨的证明了 第一种 和 第二种 的结论
(如有不足或错误,敬请指正)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)