Python 代码调试

Python code debugging

我想知道这段代码有什么问题:

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]

您没有将 create_list_ 的 return 值分配回 list_

如果你写:

list_ = create_list_(list_)

它会起作用。

我的印象是对函数参数和变量的工作方式存在根本性的误解(如果我错了请原谅我)。

我试着解释一下:

首先,您定义一个全局变量"list_"并将其初始化为一个空列表。 迄今为止。但这是一个与函数中使用的变量完全不同的变量。

基本上,如果您定义一个带有参数列表的函数,例如

def f(arg):
    ...

传递给函数的任何值都可以在 f 中使用名称 arg 引用。

参数 arg 是您传递给函数的任何值的占位符,当您通过调用它来调用它时传递给它

some_var = f("whatever")

这会将字符串 "whatever" 传递给 f。在 f 内部,局部变量 arg 将具有仅用于此调用的值 "whatever"。 f 的另一个信息可能是 f(42),其中 arg 的值为 42。

因此,arg 只能在 f 内部本地访问(并且有效)(这就是它被称为局部变量的原因)。对 arg 的任何更改也只是本地的; arg 甚至不存在于 f.

之外

更糟糕的是,如果您有一个同名的全局变量(在 f 外部定义)(这就是您对 list_ 所做的),局部变量 "shadows" 同名的全局变量(即不好的做法。)。

因此,函数定义中的参数列表不会列出函数内部访问的变量,而基本上只是一些占位符。

要向外部世界输出本地值,函数必须 return 一个值。这也称为 函数结果 。 Python(如 C/C++,...)关键字 "return" 为此:

def square(x):
    return x * x

这将取任何数值和return它的平方:

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

尝试此操作的一个好方法是使用 Python 交互式控制台玩一下。您可以定义函数并在那里键入任何类型的代码,就好像您只需将其键入 en 编辑器并通过解释器 运行 文件一样。

希望能为您指明正确的方向。这实际上不是 Python 特定的,而是非常基本的编程技术,对于所有编程任务来说,明确需要理解这些技术。