Xiaodong‘s Blog

——学习生活·记录

导航

【Python】Python全局变量与局部变量的问题

Posted on 2017-03-30 18:52  张笑冬  阅读(399)  评论(0)    收藏  举报

今天在写socket程序的时候遇到的一个问题,我的一个接收消息函数总是无法将收到消息中的ip和port信息传入到我在函数外定义的变量subscriber_ipsubscriber_port中。经过查网上资料才发现起因是一个极其基本的python变量问题,只是我想当然的没有加以注意。

在Python中,函数内的变量(即使是同名变量)与函数外定义的变量没有任何关系。看如下例子:

a = 0
def func1 ():
    a = 1
def func2 ():
    print a
func1()
func2()

这段代码执行后的结果为: 0,也就是说其中func1()函数的运行并没有影响到全局变量a的数值。

因此,在python中如果要操作函数外的全局变量,必须显式使用 global 加以声明,如下:

a = 0
def func1 ():
    global a 
    a = 1
def func2 ():
    print a
func1()
func2()

而且要注意的是不能在声明的同时赋值,我之前直接写 global a = 1 也会报错。

这样出来的结果为: 1, 也就是说a的值由于func1()的执行而发生改变了。