2013-08-19 106 views
0
#!/usr/bin/python3 
def func(): 
    a = 1 
    print(a+12) 

print(a) 

結果:參考函數的變量函數外

NameError: name 'a' is not defined

是否有可能使用功能外

+0

我想你可能需要閱讀更多有關「範圍」在Python中。 a在func()的範圍內聲明,因此在該範圍之外無法看到。 –

+0

我可以用內置函數或類似的方法做到這一點 是否可能 –

+0

如果你想訪問** func()**範圍之外的** a **,它只需要在範圍之外聲明** FUNC()**。如果這沒有意義,那麼我認真推薦閱讀一些python教程。幾乎任何教程都會告訴你你想了解範圍。 –

回答

0

在蟒蛇的範圍是一個函數,或者類體,或模塊;只要您有賦值語句foo = bar,它就會在賦值語句所在的範圍內(默認情況下)創建一個新變量(名稱)。

了在外部範圍設置一個變量是內範圍內可讀:

a = 5 
def do_print(): 
    print(a) 

do_print() 

了在內部範圍設定的變量不能在外部範圍中看到。請注意,您的代碼甚至沒有設置該變量,因爲該行永遠不會運行。

def func(): 
    a = 1 # this line is not ever run, unless the function is called 
    print(a + 12) 

print(a) 

要像你想要的,一個函數內的變量集合,你可以試試這個:

a = 0 
print(a) 

def func(): 
    global a # when we use a, we mean the variable 
       # defined 4 lines above 
    a = 1 
    print(a + 12) 

func() # call the function 
print(a) 
0

我不認爲你可以這樣做,因爲變量'a'的範圍在函數func()內是有限的。如果你在外面定義它,你可以在函數外面調用'a'變量。如果你是python的初學者(像我一樣)使用this。它幫助我

PS:我可能是錯的,因爲我在python是一個初學者,以及

+0

這本書是太老了 - 他正在使用python 3 –

+0

@AnttiHaapala - 對不起,我改變了它。謝謝 – user9517536248

0

您可以通過使用return語句一起傳遞一個值較高的範圍。

def func(): 
    a = 1 
    print(a+12) 
    return a 

a = func() 
print(a) 

結果:

13 
1 

注意,值未綁定到該變量的函數中有名稱。你可以將它分配給任何你想要的,或者直接在另一個表達式中使用它。

def func(): 
    a = 1 
    print(a+12) 
    return a 

func() 
print(a) #this will not work. `a` is not bound to anything in this scope. 

x = func() 
print(x) #this will work 

print(func()) #this also works