• python global全局变量 模块通信问题


     1 # foo.py
     2 a = 3
     3 
     4 
     5 class Foo(object):
     6     # noinspection PyMethodMayBeStatic
     7     def __init__(self):
     8         pass
     9 
    10     def f(self):
    11         global a
    12         a = 4
    13         print(a)
    
    
     1 # bar.py
     2 from foo import Foo
     3 
     4 
     5 class Test(Foo):
     6     # noinspection PyMethodMayBeStatic
     7     def __init__(self):
     8         global a
     9         super(Test, self).__init__()
    10         self.f()
    11         a = 5
    12         self.f()
    13         print(Foo.f.__globals__['a'])
    14 
    15 
    16 Test()
    # 4
    # 4
    # 4
    
    

    可以看出输出4,4, 4,说明bar.py虽然声明了global a, 但并没有改变foo.py的global a, 原因为bar.py 中 声明global a作用域只是在当前模块,若将barl.py中的a = 5赋值语句注释掉,

    将会报错,变量未声明。

    正确使用方法如下:

     1 # bar.py
     2 from foo import Foo
     3 
     4 
     5 class Test(Foo):
     6     # noinspection PyMethodMayBeStatic
     7     def __init__(self):
     8         super(Test, self).__init__()
     9         self.f()
    10         print(Foo.f.__globals__['a'])
    11 
    12 Test()
  • 相关阅读:
    (转)详谈高端内存和低端内存
    高级声明------定义一个函数指针数组指针
    A Bug's Life POJ
    How Many Answers Are Wrong HDU
    A
    B
    数据处理----离散化
    Serval and Parenthesis Sequence CodeForces
    D
    C
  • 原文地址:https://www.cnblogs.com/coodyz/p/11338746.html
Copyright © 2020-2023  润新知