zoukankan      html  css  js  c++  java
  • python程序中用类变量代替global 定义全局变量

     在python编程中,一般使用global 关键字来定义全局变量,但是发现 global 关键字在涉及多个文件时,好像存在问题。

    比如,单个文件下用global定义使用全局变量的情况 ,看下面的代码

    # -*-coding: utf-8 -*-
    #from data_def import *
    distance=34
    
    class test(object):
        def __init__(self):
           pass
        #在类里面改变全局变量的值
        def change_1(self):
            global distance
            distance=90
            print("distance in class:", distance)
    
        #输出全局变量的值
        def print_value(self):
            global distance
            print("distance in class:", distance)
    
    #在函数里面使用和打印全局变量的值
    def function_test():
        global distance
        print("global value in function", distance)
        distance=234
        print("global value in function",distance)
    
    function_test()  #在函数里面使用和改变全局变量的值 34->234
    t=test()
    t.print_value()  #在类里面打印全局变量的值 234
    t.change_1()   #在类里面改变全局变量的值 234->90

    程序运行结果如下:全局变量运行正确

    global value in function 34
    global value in function 234
    distance in class: 234
    distance in class: 90

    下面把上述代码拆分成两个文件,data_def.py 和 main.py ,data_def.py 定义全局变量distance 和类 ,main.py 导入data_def.py。

    data_def.py文件代码如下:

    # -*-coding: utf-8 -*-
    distance=34
    class test(object):
        def __init__(self):
           pass
        #在类里面改变全局变量的值
        def change_1(self):
            global distance
            distance=90
            print("distance in class:", distance)
    
        #输出全局变量的值
        def print_value(self):
            global distance
            print("distance in class:", distance)

    main.py文件代码如下:

    # -*-coding: utf-8 -*-
    from data_def import *
    #在函数里面使用和打印全局变量的值
    def function_test():
        global distance
        print("global value in function", distance)
        distance=234
        print("global value in function",distance)
    
    print("gloabl value in main:",distance)  #主函数里面,全局变量为34
    function_test()  #在函数里面使用和改变全局变量的值 34->234
    t=test()
    t.print_value()  #在类里面打印全局变量的值 输出为 34 并非是234,函数里面改变全局变量值不影响类里面全局变量的值???
    t.change_1()   #在类里面改变全局变量的值 34->90

    程序运行结果:

    gloabl value in main: 34
    global value in function 34
    global value in function 234
    distance in class: 34
    distance in class: 90

    两次运行的结果存在出入,可以发现,用global 在不同文件间操作全局变量时,生成的结果和我们想象的不太一样,具体原因还不明确??知道原因的欢迎留言。

    为此,可以考虑用类变量来定义全局变量。实现方式看以下代码。

    第一个文件(data_def.py)定义两个类,第一个类定义全局变量distance ,第二个类为普通操作类

    # -*-coding: utf-8 -*-
    #filename:data_def.py
    #构造类变量作为全局变量,代替global
    class global_value():
        distance=34
    
    class test(object):
        def __init__(self):
           pass
        #在类里面改变全局变量的值
        def change_1(self):
            global_value.distance=40
            print("distance in class:", global_value.distance)
    
        def change_2(self):
            global_value.tail_dis=90
            print("distance in class:",global_value.distance)
    
        #输出全局变量的值
        def print_value(self):
            print("distance in class:", global_value.distance)

    第二个文件(main.py) 导入第一个文件定义的类,并进行变量操作

    # -*-coding: utf-8 -*-
    from data_def import *
    
    #在函数里面使用和打印全局变量的值
    def function_test():
        print("global value in function", global_value.distance)
        global_value.distance=234
        print("global value in function",global_value.distance)
    
    print("global value in main:",global_value.distance)   #打印出全局变量的初始值:34
    t=test()
    t.change_1()                                           #在类里面改变全局变量的值:34->40
    print("global value in main:",global_value.distance)
    t.change_2()                                           #在类里面改变全局变量的值:40->90
    print("global value in main:",global_value.distance)
    function_test()                                        #在自定义函数里面使用和改变全局变量的值 90->234
    global_value.distance=11                               #在main主函数里面改变全局变量的值 234->11
    t.print_value()                                        #在类里面查看已经改变的全局变量的值 11

    程序输出结果如下:

    程序执行输出结果:
    global value in main: 34
    distance in class: 40
    global value in main: 40
    distance in class: 40
    global value in main: 40
    global value in function 40
    global value in function 234
    distance in class: 11

    从输出结果可以看出,利用类变量的方式也可以实现全局变量的定义,并且可以跨文件操作。

  • 相关阅读:
    变动原因change事件
    获取一个Java项目的所有接口信息
    部署
    Apache Nutch(二)
    导论
    昨天去看了海,今天是第一天上班.心情不错.告诉自己要努力啊!
    从ASP.net Ajax 1.0 Beta 1升级到 ASP.net Ajax 1.0 Beta 2具体说明。
    好些天没有写什么了,不能懒散下去了,要重新振作起来。
    ComboBox怎么不绑定而设置Text和Value 网上收集
    使用无刷新技术,去请求该失效Session的页面,实现跳转到重新登陆页面。
  • 原文地址:https://www.cnblogs.com/mangojun/p/10870357.html
Copyright © 2011-2022 走看看