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 特定的,而是非常基本的编程技术,对于所有编程任务来说,明确需要理解这些技术。
我想知道这段代码有什么问题:
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 特定的,而是非常基本的编程技术,对于所有编程任务来说,明确需要理解这些技术。