[问题] 变量范围

楼主: Arim (象山下智久)   2014-11-28 23:24:02
hi,各位版友好
def foo():
print sys
if __name__ == '__main__':
sys = "aaa"
foo()
为什么 foo 可以存取到 sys?
谢谢
作者: alibuda174 (阿哩不达)   2014-11-28 23:47:00
可以吗?
作者: DemonDeath (Beethoven Virus)   2014-11-28 23:51:00
不行吧
作者: alibuda174 (阿哩不达)   2014-11-29 00:05:00
因为if并不是函式 不会形成区域变量你写的程式里 sys仍会变成全域变量可试着在最后print(globals()) 可看到全部的全域变量
作者: ocean5566 (煙大屌熟男)   2014-11-29 00:13:00
? 你觉得不行的点在哪里?function里面找不到变量 会往上找 直到尽头
作者: uranusjr (←這人是超級笨蛋)   2014-11-29 00:14:00
写过 C-like 语言的人第一直觉应该都会是不行
作者: ocean5566 (煙大屌熟男)   2014-11-29 00:15:00
sys就在上面 然后foo把它 印出来 有何问题 ....?
作者: uranusjr (←這人是超級笨蛋)   2014-11-29 00:17:00
但 Python 变量其实是 function/module scoped, 和 C 或Java 家族的 block scoped 不一样, 所以认知要稍微调整
作者: eric541 (YcK)   2014-11-29 15:30:00
u大有说了因为 Python 是 function/module scope所以单纯写在 if 内的变量其实不会只在 if 内而是global
作者: ocean5566 (煙大屌熟男)   2014-11-29 15:34:00
用中文观点去理解英文文法 那你一辈子都学不会英文 end
作者: ck574b027 (荒围!定厝!贼!妹!)   2014-12-03 18:06:00
并没有"变成 global variable",它就是 variable,if 不会新增 scope。

Links booklink

Contact Us: admin [ a t ] ucptt.com