我對全局變量沒有用處,也從來沒有明確地定義過一個,但我似乎在我的代碼中有一個。你能幫我把它變成當地的嗎?爲什麼我的(本地)變量的行爲像一個全局變量?
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
中迭代的目的因此被擊敗。
我是新來的蟒蛇,甚至更新的論壇,所以讓我知道如果我需要澄清我的問題。謝謝。
更新非常感謝迄今爲止所有的答案。我幾乎瞭解它,除了我之前做過這樣的事情,結果更加快樂。你能解釋爲什麼下面的代碼不同嗎?
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.
謝謝。
更新II爲了回答我自己的第二個問題,差異似乎是在第一個代碼(未顯示)中使用列表方法,而在第二個代碼中缺少它。
謝謝。這很好。 – bongbang 2012-07-09 05:17:25