global可以修改全局变量,但是要调用后才能生效,nonlocal一般使用在嵌套函数中可以修改外层函数局部变量,同样要调用才能生效。

global和nonlocal不能同时存在,如果在函数中使用global修饰了变量,那么在嵌套函数中用nonlocal修饰同名变量会发生报错,因为nonlocal表示该变量在函数中已经定义,但检查时因为同名变量被global修饰为全局变量,所以不存在同名的局部变量,从而导致错误。