一般考虑来自其他语言的范围规则,我有点假设Python的范围规则对于全局变量是相似的,直到我在下面的代码中遇到变量 count 的问题:
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)
我收到以下错误: 在intPermute中输入文件“/Users/ns/permute2.py”,第9行 print(“%d:%s%c%c”%(count,str(fix),var [0],var [1])) UnboundLocalError:赋值前引用的局部变量'count'
为什么定义python范围规则使得我无法访问函数intPermute的内部范围(if语句)中的全局变量计数?可以在函数的第一个语句范围级别访问相同的变量吗?这是为什么? 我知道可以通过在函数中定义同名的局部变量来“覆盖”全局范围变量,但这似乎不是这种情况。
我能够在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)为什么global关键字可以解决这个问题?它是否总能解决1级升级的全局变量?
感谢。