Possible Duplicate:
Python variable assigned by an outside module is accessible for printing but not for assignment in the target modulePython的全局變量不是裏面的功能
一般考慮從其他語言的範圍規則的第二範圍級別訪問,我有點假設的Python的作用域規則是全局變量相似,直到我打了在下面的代碼問題可變計數:
count=1
def intPermute(fix,var):
if len(var) ==2:
#import pdb
#pdb.set_trace()
print ("%d: %s%c%c" % (count, str(fix),var[0],var[1]))
count+=1
print ("%d: %s%c%c" % (count, str(fix),var[1],var[0]))
count+=1
else:
for i in range(len(var)):
intPermute(fix+var[i],var[:i]+var[i+1:])
def permuteStr(string):
# permute a string for nPn combinations basically n!
if string =="" or len(string) <=0:
return;
if len(string) <2:
print "%d: %s" % (count, str(string))
intPermute("",string)
我得到了以下錯誤: 文件 「/Users/ns/permute2.py」,9號線,在intPermute 打印(「%d:%s的%c%c「%(count,str(fix),var [0],var [1]) ) UnboundLocalError:分配之前引用的本地變量'count'
爲什麼python範圍限定規則定義爲我無法訪問函數intPermute的內部範圍(if語句)中的全局變量count?函數的第一個語句作用域級別中可以訪問同一個變量?這是爲什麼? 我知道可以通過在一個函數中定義一個同名的局部變量來「覆蓋」一個全局範圍變量,但這似乎並不是這種情況。
我可以添加以下語句intPermute函數的開頭來解決這個問題: 全球數
def intPermute(fix,var):
global count
if len(var) ==2:
#import pdb
#pdb.set_trace()
print ("%d: %s%c%c" % (count, str(fix),var[0],var[1]))
count+=1
print ("%d: %s%c%c" % (count, str(fix),var[1],var[0]))
count+=1
else:
for i in range(len(var)):
intPermute(fix+var[i],var[:i]+var[i+1:])
現在,全球的這個意思並不明顯對我來說,我想全局關鍵字是「導出」全局範圍內的局部變量。
所以2問題: 1)爲什麼Python不允許在函數intPermute的第二級作用域中看到全局變量計數?雖然它可以在函數的第一級範圍訪問? 2)爲什麼全球關鍵字可以解決這個問題?它是否總是用於解決1級全局變量?
謝謝。