python中的一个坑—— import 和 import xxx as XX的区别

本文通过实例解析了Python中导入模块时使用别名(as)可能出现的问题。当使用别名导入模块内的变量时,该别名实际上创建了一个新的局部变量,与原模块变量无关。即使修改原模块变量的值,别名变量也不会同步更新,这可能导致预期之外的行为。总结:Python的别名导入不直接引用原模块对象,而是创建独立副本。
摘要由CSDN通过智能技术生成

学习python 我们必然会用到import

今儿又踩了一个坑,文件结构如下:
在这里插入图片描述

# testlib1/testModule
num = 1

一、首先我们看第一个文件

# -*- coding: utf-8 -*-
from PythonBaseUse.pythonBug.twoerror.testlib1 import testModule
print(testModule.num)
testModule.num = 2
print(testModule.num)

输出结果如下:
在这里插入图片描述
嗯!很合情合理!

二、再来看第二个文件

# -*- coding: utf-8 -*-
from PythonBaseUse.pythonBug.twoerror.testlib1 import testModule
from PythonBaseUse.pythonBug.twoerror.testlib1.testModule import num as testModuleNum

print(testModuleNum, testModule.num)
testModule.num = 2
print(testModuleNum, testModule.num)

输出结果如下:
在这里插入图片描述
开始不对味了! 明明修改了testModule.num的值,testModuleNum却不变!

三、说明结果

我们可以在debug模式下查看一下
在这里插入图片描述
从上图就一目了然了:

testModuleNum在初始化的时候就被定义成一个变量保存起来了,并且与原模块testModule是没有依赖关系的

为了验证上述猜想我们做如下代码

# -*- coding: utf-8 -*-
from PythonBaseUse.pythonBug.twoerror.testlib1 import testModule
from PythonBaseUse.pythonBug.twoerror.testlib1.testModule import num as testModuleNum

print(testModuleNum, testModule.num)
testModule.num = 2
print(testModuleNum, testModule.num)
testModuleNum = 10
print(testModuleNum, testModule.num)

输出结果如下:
在这里插入图片描述
结果证实了我们的猜想:

testModuleNum在初始化的时候就被定义成一个变量保存起来了,并且与原模块testModule是没有依赖关系的!

总结

别名(as) 相当于是初始化了一个与原模块不存在依赖关系的变量!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值