Python如何在函数中使用同名的全局变量
全局变量可以在程序中任何位置被访问甚至修改,但是,当函数中定义了和全局变量同名的局部变量时,那么在当前函数中,无论是访问还是修改该同名变量,操作的都是局部变量,而不再是全局变量。
当函数内部的局部变量和函数外部的全局变量同名时,在函数内部,局部变量会“覆盖”同名的全局变量。
举个实例:
1 name = "Python教程" 2 def demo (): 3 #访问全局变量 4 print(name) 5 demo()
程序输出结果:
Python教程
上面程序中,第 4 行直接访问 name 变量,这是允许的。在上面程序的基础上,在函数内部添加一行代码,如下所示:
name = "Python教程" def demo (): #访问全局变量 print(name) name="django教程" demo()
程序输出结果:
UnboundLocalError: local variable 'name' referenced before assignment
Python 语法规定,在函数内部对不存在的变量赋值时,默认就是重新定义新的局部变量。上面程序中,第 5 行就定义了一个新的 name 局部变量,由于该局部变量名和全局变量名 name 同名,局部 name 变量就会“覆盖”全局 name 变量,再加上局部变量 name 在 print(name) 后才被初始化,违反了“先定义后使用”的原则,因此程序会报错。
解决方案:
在函数中声明全局变量。为了避免在函数中对全局变量赋值(不是重新定义局部变量),可使用 global 语句来声明全局变量。因此,可将程序改为如下形式:
name = "Python教程" def demo (): #访问全局变量 global name print(name) name="django教程" print(name) demo()
程序输出结果:
Python教程
django教程