【发布时间】:2016-08-26 07:27:27
【问题描述】:
我正在尝试使用 python 基本库对“1024”进行编码。在此过程中,我尝试将列表 [0, 2, 4, 4] 变为 [0, 2, 8, 0]。所以这是我的测试代码。这很容易。
def merger(a, b):
if a == b:
a += b
b = 0
numlist = [0, 2, 4, 4]
merger(numlist[0], numlist[1])
merger(numlist[1], numlist[2])
merger(numlist[2], numlist[3])
print (numlist)
所以当我尝试进行合并时。我期望输出 [0, 2, 8, 0]。但是它给了我 [0, 2, 4, 4] 。我想可能是因为我只是更改了函数 a b 的局部变量而不是实际参数?但是,如果我想让这种情况发生,我该怎么办?谢谢!
我想我一般想知道我是否想要一个函数不返回任何东西,而只是改变我作为参数传递的变量的值。我怎样才能实现它?
【问题讨论】:
-
可以用
global a, b引入全局变量。但是,这通常不被认为是一种好的做法……人们通常更喜欢使用return语句从函数中获取值。 -
@nostradamus:是的,避免修改全局变量很好,但
global对 OP 的代码没有帮助。 -
哦,这很有趣。谢谢!
-
在我看来,使用全局变量几乎可以做任何事情,这与优雅的编码完全相反...例如,您可以在这里引入 4 个全局变量:
numlist = [g1, g2, g3, g4]和一个本地变量名为gsender的变量。后者会将信息传送到def merger(gsender),这两个变量应该合并。一点都不优雅,但你可行。 -
我认为这可能更像是出于安全原因。使用全局变量可能会导致代码不安全或不稳定?