12-名称相同的局部变量和全局变量
3.6.4 名称相同的局部变量和全局变量
从技术上讲,在Python中让局部变量和全局变量同名是完全合法的。但要想程序简单,就要避免这样做。为了了解实际发生的情况,请在文件编辑器中输入以下代码,并保存为sameName.py:
def spam():
❶ eggs = 'spam local'
print(eggs) # prints 'spam local'
def bacon():
❷ eggs = 'bacon local'
print(eggs) # prints 'bacon local'
spam()
print(eggs) # prints 'bacon local'
❸ eggs = 'global'
bacon()
print(eggs) # prints 'global'
运行该程序,输出结果如下:
bacon local
spam local
bacon local
global
可以在https://autbor.com/localglobalsamename/上查看这个程序的执行情况。在这个程序中,实际上有3个不同的变量,但令人迷惑的是,它们都名为 eggs
。这些变量如下。
❶ 名为 eggs
的变量,存在于 spam()
函数被调用时的局部作用域。
❷ 名为 eggs
的变量,存在于 bacon()
函数被调用时的局部作用域。
❸ 名为 eggs
的变量,存在于全局作用域。
因为这3个独立的变量都有相同的名字,追踪某一个时刻使用的是哪个变量,可能比较麻烦。这就是应该避免在不同作用域内使用相同变量名的原因。