[問題] 變數範圍

作者: 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