2012-07-12 27 views
1

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級全局變量?

謝謝。

回答