zoukankan      html  css  js  c++  java
  • Python自由之路(四)变量作用域

    Python中,在一个函数里,当搜索一个标识符的时候,先从函数你的局部变量开始搜索,如果局部作用域没有,再到模块所在的命名空间下的全局域找,再找不到就抛出NameError异常。一个变量的作用域与它寄住的名称空间有关(下面会讨论到)。
     当函数中存在一个 变量 example,而全局域中也存在一个变量example,那么这时候规则会变得很有趣。但也很容易弄错。来看几个例子吧。。。
     _global="I'm a global variable"
     def testgloba1(): 
         print _global
     def testgloba2():
         print _global
          _global='123'
    Testglobal2()异常:UnboundLocalError: local variable '_global' referenced before assignment
    当在函数中创建了与全局域中同名的局部变量_global时,需要特别注意在_global之前是否又引用了同名的全局变量_global,如果是这样就会引发变量未声明的异常,接下来看看解释器怎样解决这个问题,我们引入了global关键字,在函数内部直接传递全局变量的引用:
     print _global ,id(_global)
    def testgloba3():
      global _global   #1.直到再次声明同名变量_global之前的所有_global
          print _global,id(_global) #2.都是对全局变量_global的引用
          _global='123' 
          print _global,id(_global)
    如果在#2之后还要对全局变量进行访问,那么最好就是在#1之后为全局_global定义一个新的别名。
    注意:局部同名变量不能在global关键字之前使用,否则会有警告,而且结果也不正确。
     print _global ,id(_global)
    def testgloba3():
      _global='123' 
          print _global,id(_global)
      global _global   #SyntaxWarning
          print _global,id(_global)
    SyntaxWarning: name '_global' is assigned to before global declaration
    Global关键字的还有一个作用就是在函数内部可以声明全局域的变量,看例子:
    def testgloba4():
      global _my_global
      _my_global = "I'm a global variable from testglobal4()"
     Print _my_global
  • 相关阅读:
    一些暂时被我鸽掉的题目
    概率期望生成函数 学习笔记?
    「SDOI2017」树点涂色 解题报告
    「十二省联考 2019」字符串问题 解题报告
    2019好多省联考 游记
    懒癌 解题报告
    MySQL 性能优化
    数据库优化
    平台团购活动商品同步功能
    ECSSHOP表结构
  • 原文地址:https://www.cnblogs.com/ysisl/p/1548072.html
Copyright © 2011-2022 走看看