python的全局变量与局部变量的问题


q=0
def digui(n , m):
    if(m>13):
        return
    if(n==13):
        if(m==13):
            q=q+1
        return
    for a in range(5):
        digui(n+1,m+a)
def main():
    digui(0,0)
    print(q)

这个里面q应该是全局变量吧,但是digui函数里面的q=q+1报错,变成了局部q,这是为什么?

def digui(n,m):
 global q
 ...

这个里面q应该是全局变量吧,但是digui函数里面的q=q+1报错,变成了局部q,这是为什么?
因为函数定义了本地作用域,而模块定义的是全局作用域。如果想要在函数内定义全局作用域,需要加上global修饰符
在函数内定义全局变量,需要加上global修饰符。题主上面所写在函数外声明,然后函数内这样直接使用是不可以的。因为这样写法不符合python语言作用域的相关规则。
解决方案:
函数digui(n , m)内添加一句 global q 进行修饰声明即可。
以上仅供参考,
希望对题主有所帮助!