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级全局变量?
谢谢。