[問題] 變數範圍

看板Python作者 (Arim5566)時間11年前 (2014/11/28 23:24), 11年前編輯推噓0(0016)
留言16則, 6人參與, 最新討論串1/1
hi,各位版友好 def foo(): print sys if __name__ == '__main__': sys = "aaa" foo() 為什麼 foo 可以存取到 sys? 謝謝 -- ~宅男的四個徵兆~ ∠□ ○ ! * \○/ ★    (○ ? ╦╦└□ " ○□═ □   □> ║║√√ ╦══╦ ∥    |\ 一回家就上PTT 每天想正妹 以當好人為樂 忘記正妹虧欠自己 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 49.159.133.241 ※ 文章網址: http://www.ptt.cc/bbs/Python/M.1417188245.A.6E1.html

11/28 23:47, , 1F
可以嗎?
11/28 23:47, 1F

11/28 23:51, , 2F
不行吧
11/28 23:51, 2F
已修改 ※ 編輯: Arim (49.159.133.241), 11/29/2014 00:01:26

11/29 00:05, , 3F
因為if並不是函式 不會形成區域變數
11/29 00:05, 3F

11/29 00:05, , 4F
你寫的程式裡 sys仍會變成全域變數
11/29 00:05, 4F

11/29 00:06, , 5F
可試著在最後print(globals()) 可看到全部的全域變數
11/29 00:06, 5F

11/29 00:13, , 6F
? 你覺得不行的點在哪裡?
11/29 00:13, 6F

11/29 00:14, , 7F
function裡面找不到變數 會往上找 直到盡頭
11/29 00:14, 7F

11/29 00:14, , 8F
寫過 C-like 語言的人第一直覺應該都會是不行
11/29 00:14, 8F

11/29 00:15, , 9F
sys就在上面 然後foo把它 印出來 有何問題 ....?
11/29 00:15, 9F

11/29 00:17, , 10F
但 Python 變數其實是 function/module scoped, 和 C 或
11/29 00:17, 10F

11/29 00:17, , 11F
Java 家族的 block scoped 不一樣, 所以認知要稍微調整
11/29 00:17, 11F
為什麼寫在這個 if 裏面的會變成 global variable? ※ 編輯: Arim (49.159.133.241), 11/29/2014 13:47:25

11/29 15:30, , 12F
u大有說了因為 Python 是 function/module scope
11/29 15:30, 12F

11/29 15:31, , 13F
所以單純寫在 if 內的變數其實不會只在 if 內而是global
11/29 15:31, 13F

11/29 15:34, , 14F
用中文觀點去理解英文文法 那你一輩子都學不會英文 end
11/29 15:34, 14F

12/03 18:06, , 15F
並沒有"變成 global variable",它就是 variable,
12/03 18:06, 15F

12/03 18:11, , 16F
if 不會新增 scope。
12/03 18:11, 16F
文章代碼(AID): #1KU9ELRX (Python)
文章代碼(AID): #1KU9ELRX (Python)