2015-04-17 166 views
0

我想知道什麼是與這段代碼的問題:Python代碼調試

list_=[] 

def inicialize_list_(list_): 
    list_=[] 
    return list_ 

def create_list_(list_): 

    list_=inicialize_list_(list_) 

    i=0 

    for num in range(8): 
     list_.append(num) 
     i=i+1 

    return list_ 

create_list_(list_) 

print list_ 

create_list_(list_) 

print list_ 

這是我得到的輸出:

[] 
[] 

但是,這是預期的輸出:

[0, 1, 2, 3, 4, 5, 6, 7] 
[0, 1, 2, 3, 4, 5, 6, 7] 
+0

您未通過從「create_list_(list_)」返回的「_list」,因此您正在使用「打印」功能訪問的_list變量爲空。 你應該使用「_list = create_list_(list_)」 –

回答

1

您不會將create_list_的返回值分配回list_

如果你寫:

list_ = create_list_(list_) 

它會工作。

-1

我的印象是有一個基本的誤解,如何函數參數和變量如何工作(原諒我,如果我錯了)。

我試圖解釋:

首先,你定義一個全局變量「list_」,它初始化爲空列表。 到目前爲止。但是這是與那些在函數中使用的完全不同的變量。

基本上,如果你定義一個函數的參數列表一樣

def f(arg): 
    ... 

傳遞給函數的任何值裏面可以F使用的名稱arg引用。

參數arg是你傳遞給函數時,您可以通過調用它調用它像

some_var = f("whatever") 

這將通過刺痛「無所謂」到F的任意值的佔位符。在f裏面,局部變量arg的值就是這個調用的「whatever」值。 的F另一個infocation可以是f(42),其中arg的值將爲42

所以,arg是唯一的本地訪問(合法的)內部F(這就是爲什麼它被稱爲一個局部變量)。對arg的任何改變也只是局部的; arg甚至不存在f之外。更糟糕的是,如果你有一個全局變量(定義在f之外),並且具有相同的名稱(這就是你對list_所做的),局部變量「陰影」同名全局變量(這是不好的練習btw )。

因此,函數定義中的參數列表沒有列出在函數內部訪問的變量,但基本上只是一些佔位符。

要向外界輸出本地值,函數必須返回的值。這也被稱爲功能結果。 Python(如C/C++,...)這個關鍵字「回報」:

def square(x): 
    return x * x 

這將採取任何數值,並返回它的平方:

>>> square(2) 
4 
>>> square(8) 
64 
... 

一個很好的方式來嘗試這是打了一下使用Python互動控制檯。您可以定義函數並在其中鍵入任何類型的代碼,就好像您只需在編輯器中鍵入它並通過解釋器運行該文件即可。

希望能給你正確的方向。實際上這不是Python特定的,但是非常基本的編程技術,對於所有的編程任務來說,這些技術都非常需要理解。