2015-04-17 124 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特定的,但是非常基本的编程技术,对于所有的编程任务来说,这些技术都非常需要理解。