我没有使用全局变量,也从未明确定义过,但我的代码中似乎有一个。你能帮我把它本地化吗?
def algo(X): # randomized algorithm
while len(X)>2:
# do a bunch of things to nested list X
print(X)
# tracing: output is the same every time, where it shouldn't be.
return len(X[1][1])
def find_min(X): # iterate algo() multiple times to find minimum
m = float('inf')
for i in some_range:
new = algo(X)
m = min(m, new)
return m
X = [[[..], [...]],
[[..], [...]],
[[..], [...]]]
print(find_min(X))
print(X)
# same value as inside the algo() call, even though it shouldn't be affected.
X 似乎表现得像一个全局变量。随机算法algo()
实际上只在第一次调用时执行一次,因为 X 保留其更改的值,它永远不会进入while
循环。迭代的目的find_min
因此被打破。
我是 python 的新手,甚至是这个论坛的新手,所以如果我需要澄清我的问题,请告诉我。谢谢。
更新非常感谢到目前为止的所有答案。我几乎理解它,除了我以前做过这样的事情,结果更快乐。你能解释一下为什么下面的代码不同吗?
def qsort(X):
for ...
# recursively sort X in place
count+=1 # count number of operations
return X, count
X = [ , , , ]
Y, count = qsort(X)
print(Y) # sorted
print(X) # original, unsorted.
谢谢你。
更新二要回答我自己的第二个问题,不同之处似乎是在第一个代码(未显示)中使用了列表方法,而在第二个代码中则没有。