2013-07-05 32 views
0

請參見下面的代碼:爲什麼默認情況下Python中的int對象被看作locale作用域?

i = 1 
s = [1] 

def foo(): 
    global i 
    i += 1 
    print i 

def goo(): 
    s.append(2) 
    print s 

我想知道爲什麼PyIntObject默認情況下,本地設置,而其他的對象呢?

謝謝!

+0

你聽起來很困惑。 –

+2

你知道PyIntObjects,而不是範圍規則,這很奇怪。 – user2357112

+0

可能的重複[在Python中,爲什麼函數可以修改調用者感覺到的一些參數,但不是其他人?](http://stackoverflow.com/questions/575196/in-python-why-can-a-function -modify-一些論點,作爲感知,由這主叫方) – delnan

回答

0

您不需要global i,除非您打算將i綁定到某個其他對象。這同樣適用於s。由於它們都綁定到不可變對象上,因此不能將它們綁定到新對象上來更改它們的「值」。

所以這是確定

def foo(): 
    print i 

但在這裏,你需要使用global關鍵字

def foo(): 
    global i 
    i = 'world' 

同樣對於s。分配意味着你孃家的global關鍵字有

def goo(): 
    global s 
    s = 2 

當然,你可以改變可變對象,所以往往你並不需要讓他們的全球

i = [1] 

def foo(): 
    i[0] = 2 

但你仍然需要做i全球如果你想重新綁定到不同的對象

相關問題