グローバル変数は使用せず、明示的に定義することもありませんが、コードにグローバル変数が含まれているようです。ローカルにするのを手伝ってくれませんか?
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()
は、実際には最初の呼び出しで 1 回だけ実行されます。これは、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.
ありがとうございました。
更新 II私自身の 2 番目の質問に答えるために、違いは、最初のコード (表示されていません) で list メソッドを使用し、2 番目のコードではそれを使用していないことです。