common.py
HANDLE_FLAG=False
RECV_DATA_LIST=[]
recv_msg.py
from common import RECV_DATA_LIST
from common import HANDLE_FLAG
#import common
def recv_msg():
"""模拟接收到数据,然后添加到common模块中的列表中"""
print("--->recv_msg")
for i in range(5):
RECV_DATA_LIST.append(i)
def test_recv_data():
"""测试接收到的数据"""
print("--->test_recv_data")
print(RECV_DATA_LIST)
def recv_msg_next():
"""已经处理完成后,再接收另外的其他数据"""
print("--->recv_msg_next")
# if HANDLE_FLAG:
if HANDLE_FLAG:
print("------发现之前的数据已经处理完成,这里进行接收其他的数据(模拟过程...)----")
else:
print("------发现之前的数据未处理完,等待中....------")
handle_msg.py
from common import RECV_DATA_LIST
from common import HANDLE_FLAG
#import common
def handle_data():
"""模拟处理recv_msg模块接收的数据"""
print("--->handle_data")
for i in RECV_DATA_LIST:
print(i)
# 既然处理完成了,那么将变量HANDLE_FLAG设置为True,意味着处理完成
# global HANDLE_FLAG
# HANDLE_FLAG = True
HANDLE_FLAG = True
print(HANDLE_FLAG)
def test_handle_data():
"""测试处理是否完成,变量是否设置为True"""
print("--->test_handle_data")
# if HANDLE_FLAG:
print(HANDLE_FLAG)
if HANDLE_FLAG:
print("=====已经处理完成====")
else:
print("=====未处理完成====")
def sysout():
print(HANDLE_FLAG)
main.py
from recv_msg import *
from handle_msg import *
def main():
# 1. 接收数据
recv_msg()
# 2. 测试是否接收完毕
test_recv_data()
# 3. 判断如果处理完成,则接收其它数据
recv_msg_next()
# 4. 处理数据
handle_data()
# 5. 测试是否处理完毕
test_handle_data()
# 6. 判断如果处理完成,则接收其它数据
recv_msg_next()
sysout()
if __name__ == "__main__":
main()
当只导入模块中的变量的时候,相当于复制了一份全局变量到当前文件中,其它文件如果也导入了是不共享的
在handle_msg.py,recv_msg.py 中都导入了
from common import RECV_DATA_LIST
from common import HANDLE_FLAG
这2个文件的变量是相互独立的,不会有任何关系,但是因为RECV_DATA_LIST是一个引用,引用内存中的变量,复制过来的全局变量是个引用,所以1个文件中对这个引用的改动会影响到另一个文件。而HANDLE_FLAG就是简单值复制,复制一份全局变量过来。