今天在写socket程序的时候遇到的一个问题,我的一个接收消息函数总是无法将收到消息中的ip和port信息传入到我在函数外定义的变量subscriber_ip和subscriber_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()的执行而发生改变了。
浙公网安备 33010602011771号