1
adrianzhang 2015-08-27 23:08:57 +08:00
file 1:
from other import do_sth a = 0 do_sth (a ) file other: def do_sth (b ): b = 2 return b |
2
MrGba2z OP |
3
xingzhi 2015-08-27 23:17:11 +08:00
Python 中的变量存放的是对象引用,由于 a 是不可变对象,再执行 a = a+1 后,引用地址已经改变了,而 test2.py 里 import 的 a 对象是改变之前的地址,你可以分别执行一下 id (a ) 就明白了。
如果把 a 换成 list 这中可变对象的话,执行 a.append (xx ), 就能达到你所要的效果。 另外,针对这样的情况,你可以通过函数来操作,不直接 import 全局变量,而是通过函数来获取该全局变量的值。 |
4
adrianzhang 2015-08-27 23:22:59 +08:00
|
5
MrGba2z OP @xingzhi
我改成 test1 a = 2 def app (): global a a = a + 1 return def avalue (): global a return a test2 from test1 import app, avalue app print avalue () 还是没用。。请问通过函数来获取是指? |
6
MrGba2z OP @adrianzhang
我上学期选了 lisp 。。然后就因为看了这篇文章把 lisp 的课退了 |
7
adrianzhang 2015-08-27 23:45:00 +08:00
@MrGba2z 那个文章里有一个关于比较各个语言优劣的 case , 这个 case 就是做一个累加器。有 python 实现的说明,看看是否是你要的。
|
8
octopus_new 2015-08-28 00:08:33 +08:00
@MrGba2z 如果只是为了获取改变后的 value ,为什么不能用:
from test1 import app, a print (a ) a = app () print (a ) 在我的理解里, app ()虽然看上去修改了 a 的 value ,但是实际上修改的是 app.a. 你在一直尝试获取的值一直都没变,即使你家上 global 关键字 |
9
xingzhi 2015-08-28 00:18:59 +08:00 1
@MrGba2z
就是你写的那样,定义一个获取全局变量的函数。 test2 from test1 import app, avalue app print avalue () 这里有个错误,你需要执行 app 函数,应该改为 app () 再 print avalue () |
10
octopus_new 2015-08-28 00:20:34 +08:00
|