Re: [问题] 全域变量问题

楼主: eight0 (欸XD)   2019-06-04 00:20:42
1. 你所说的“全域变量”其实是 module 的 property。在 python 中,module 是一个
物件,“全域变量”是物件上的属性。
2. `global` 关键字只在 function 内有意义,会把指定的变量名称 bind 到“全域变
数”。
3. 换句话说,在 A module 内使用 global foo 会指向 A.foo,在 B module 内使用
global foo 会指向 B.foo。
4. from ... import ... 的作用是“搜寻指定的 module”并“将指定 property 的值
assign 给目前 scope 内指定的变量”。如果把 from Name import MyVariable 写
在 function 内,效果就是“把 Name.MyVariable 的值指定给区域变量
MyVariable”。
→ v00623: 所以全域变量不能放在不同模组? 那我main里改的是区域? 06/03 17:54
Main.py 中修改的是 Main.MyVariable,不会影响 Name.MyVariable。可以把下面的
程式码存成一个新档案然后执行︰
import Main
import Name
print(Main.MyVariable, Name.MyVariable)
“区域变量”用来称呼 function 内的变量。虽然定义在 module root 的变量不会在
不同的 module 中共用,我们还是把它们称为 globals。
→ frank910138: 可以print(id(var)) 看 06/03 18:21
→ v00623: Id是相同的 06/03 22:37
id() 相同表示变量内的值是相同的,不表示你修改其中一个变量另一个变量也会变。
例︰
a = 1
b = 1
print(id(a), id(b), a, b)
b = 2
print(id(a), id(b), a, b)
作者: v00623 (阿哩他命EX PLUS)   2018-06-03 17:54:00
所以全域变量不能放在不同模组? 那我main里改的是区域?
作者: frank910138 (frank)   2018-06-03 18:21:00
可以print(id(var)) 看
作者: v00623 (阿哩他命EX PLUS)   2018-06-03 22:37:00
Id是相同的
作者: iphone2003 (307)   2019-06-04 00:52:00
id那边好像怪怪的,id()就是看变量内存位子没错,所以id相同代表相同物件。a=1,b=1的例子中id会一样,是因为python有事先建立一些不可变且常用的物件,所以执行a=1时不会重新建立一个int物件,而是指向原本预先建立好的那个物件,同理b也一样,所以a和b的id才会相同我没记错的话是这样,有错请见谅
作者: v00623 (阿哩他命EX PLUS)   2019-06-04 08:22:00
感谢回释 不过id那边我也记得是看内存位址 我再找找资料
作者: TuCH (谬客)   2019-06-04 08:59:00
是内存位置没错 如果 a=int(1) b=int(1) 那两个id不相同
作者: TitanEric (泰坦)   2019-06-04 10:21:00
推iphone大
作者: v00623 (阿哩他命EX PLUS)   2019-06-04 14:26:00
eight0,谢谢你上面的解释与后面的小范例,刚刚测试后有了解你说的意思了,我另外测试先import change再import a后,a就是1了,看来import顺序决定他引用的时间,谢谢

Links booklink

Contact Us: admin [ a t ] ucptt.com