当前位置:嗨网首页>书籍在线阅读

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个独立的变量都有相同的名字,追踪某一个时刻使用的是哪个变量,可能比较麻烦。这就是应该避免在不同作用域内使用相同变量名的原因。