2012-07-12 53 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级全局变量?

谢谢。

回答