作者Arim (Arim5566)
看板Python
标题[问题] 变数范围
时间Fri Nov 28 23:24:02 2014
hi,各位版友好
def foo():
print sys
if __name__ == '__main__':
sys = "aaa"
foo()
为什麽 foo 可以存取到 sys?
谢谢
--
~宅男的四个徵兆~
∠□ ○ ! * \○/ ★ (○ ?
╦╦└□ " ○□═ □ □>
║║√√ ╦══╦ ∥ |\
一回家就上PTT 每天想正妹 以当好人为乐 忘记正妹亏欠自己
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 49.159.133.241
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/Python/M.1417188245.A.6E1.html
1F:→ alibuda174: 可以吗? 11/28 23:47
2F:→ DemonDeath: 不行吧 11/28 23:51
已修改
※ 编辑: Arim (49.159.133.241), 11/29/2014 00:01:26
3F:→ alibuda174: 因为if并不是函式 不会形成区域变数 11/29 00:05
4F:→ alibuda174: 你写的程式里 sys仍会变成全域变数 11/29 00:05
5F:→ alibuda174: 可试着在最後print(globals()) 可看到全部的全域变数 11/29 00:06
6F:→ ocean5566: ? 你觉得不行的点在哪里? 11/29 00:13
7F:→ ocean5566: function里面找不到变数 会往上找 直到尽头 11/29 00:14
8F:→ uranusjr: 写过 C-like 语言的人第一直觉应该都会是不行 11/29 00:14
9F:→ ocean5566: sys就在上面 然後foo把它 印出来 有何问题 ....? 11/29 00:15
10F:→ uranusjr: 但 Python 变数其实是 function/module scoped, 和 C 或 11/29 00:17
11F:→ uranusjr: Java 家族的 block scoped 不一样, 所以认知要稍微调整 11/29 00:17
为什麽写在这个 if 里面的会变成 global variable?
※ 编辑: Arim (49.159.133.241), 11/29/2014 13:47:25
12F:→ eric541: u大有说了因为 Python 是 function/module scope 11/29 15:30
13F:→ eric541: 所以单纯写在 if 内的变数其实不会只在 if 内而是global 11/29 15:31
14F:→ ocean5566: 用中文观点去理解英文文法 那你一辈子都学不会英文 end 11/29 15:34
15F:→ ck574b027: 并没有"变成 global variable",它就是 variable, 12/03 18:06
16F:→ ck574b027: if 不会新增 scope。 12/03 18:11