py模块导入注意点

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就是简单值复制,复制一份全局变量过来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值