• 零基础学python-16.4 global作用域


    这一章节我们来讨论一下global作用域

    global的本质:不是声明变量类型,而是声明命名空间也就是作用域

    1.全局变量总结:

    1)它位与模块文件内部的顶层

    我们打开test.py模块,里面只有一句,就是下面的一句

    x=1#全局变量,其实就是模块里面所有的函数都可以使用

    2)在函数内部不声明也可以使用

    我们在test.py文件里面加一点代码

    x=1#全局变量,其实就是模块里面所有的函数都可以使用
    def test():
        print(x)
    if __name__=='__main__':
        test()
    
    输出:

    >>> ================================ RESTART ================================
    >>> 
    1
    >>> 


    3)如果在函数里面被赋值,必须经过声明

    沿用上面的代码,我们在test里面增加一句改变x的语句:

    x=1#全局变量,其实就是模块里面所有的函数都可以使用
    def test():
        print(x)
        x=2
    if __name__=='__main__':
            test()
    

    输出:

    >>> ================================ RESTART ================================
    >>> 
    Traceback (most recent call last):
      File "C:/Python34/test.py", line 6, in <module>
        test()
      File "C:/Python34/test.py", line 3, in test
        print(x)
    UnboundLocalError: local variable 'x' referenced before assignment
    >>> 

    就这样改变是不行的,需要加上global声明

    x=1#全局变量,其实就是模块里面所有的函数都可以使用
    def test():
        print(x)
        global x
        x=2
        print(x)
    if __name__=='__main__':
            test()
    
    输出:

    >>> ================================ RESTART ================================
    >>> 
    1
    2
    >>> 

    2.全局变量存在的问题

    使用全局变量,特别是改变全局变量会存在严重的问题,因为你不知道改变这个全局变量的函数的调用顺序,以至于调试非常麻烦,使用起来非常麻烦

    我们把上面的代码改成下面的样子:

    x=1#全局变量,其实就是模块里面所有的函数都可以使用
    def test():
        print(x)
        global x
        x=2
        print(x)
    def test2():
        print(x)
        global x
        x='abc'
        print(x)
        
    if __name__=='__main__':
            test()
            test2()
    

    输出:

    >>> ================================ RESTART ================================
    >>> 
    1
    2
    2
    abc
    >>> 

    现在我们调换一些两个函数的位置

    x=1#全局变量,其实就是模块里面所有的函数都可以使用
    def test():
        print(x)
        global x
        x=2
        print(x)
    def test2():
        print(x)
        global x
        x='abc'
        print(x)
        
    if __name__=='__main__':        
            test2()
            test()
    

    输出:

    >>> ================================ RESTART ================================
    >>> 
    1
    abc
    abc
    2
    >>> 


    因为x随着函数的执行而改变,如果在一个大型项目里面,有千万次的修改x,这样的问题就会非常的严重


    解决这种问题的办法:使用一个文件定义所有的全局变量,把全局变量变成通信的工具,这样才能比较容易的维护

    当然,在不熟悉的前提下,不推荐使用全局变量


    总结:这一章节主要简单说明了global作用域以及使用它需要注意的一些问题



    这一章节就说到这里,谢谢大家

    ------------------------------------------------------------------

    点击跳转零基础学python-目录

     



    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    JVM入门(一)
    2017目标
    2016目标
    C语言--第0次作业
    Hibernate ORM框架——续第一章:对象在Hibernate中的状态
    Hibernate ORM框架——续第一章:Java增删改查与Hibernate的增删改查的对比
    Hibernate ORM框架——续第一章:Hibernate的增删改查(第一个hibernate代码的优化)
    Hibernate ORM框架——第一章:Hibernate简介与操作基础
    改善SQL语句
    SQL Server的聚集索引和非聚集索引
  • 原文地址:https://www.cnblogs.com/raylee2007/p/4896738.html
Copyright © 2020-2023  润新知