Python 2.7 Python全局变量在函数的第二作用域级别内不可访问
可能重复:Python 2.7 Python全局变量在函数的第二作用域级别内不可访问,python-2.7,scoping,Python 2.7,Scoping,可能重复: 一般来说,考虑到其他语言的作用域规则,我认为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])) c
一般来说,考虑到其他语言的作用域规则,我认为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)
现在,全局的这个含义对我来说并不明显,我认为全局关键字是“导出”全局范围内的局部变量
因此,有两个问题:
1) 为什么Python不允许在函数intPermute的第二级作用域中查看全局变量计数?虽然它在函数的第一级范围内是可访问的?
2) 为什么全局关键字可以解决这个问题?它是否总是适用于解析1级全局变量
谢谢。这是“设计”,请参阅:
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:])