【Python踩坑】from和import两种导入库的区别

概要:大部分情况下两种导库方式from xxx import xxx和import xxx这两种方式并无区别,除非你想要修改导入模块内的变量

 在python中,有两种导库方式:from xxx import xxx和import xxx。对于大多数情况下,它们的区别只有要不要用xxx.aaa来访问库里面的变量的函数,但是当我们想要修改导入库内的变量时,就会陷入一个很离奇的问题,示例如下。
我们首先定义一个测试库,aaa.py:

a = 1


def changeA():
    global a
    a = 2

再在bbb.py里导入它:

from aaa import *
print(a)  # 输出 1
changeA()  # 修改 a 的值
print(a)  # 应该输出 2

这里本应该输出
1
2
但是实际上输出了
1
1
这就是from语句的特性:只会一次性创建模块变量的引用。也就是说,bbb.py中的变量aaaa.a的引用,而当调用changeA函数时,引用并不会更新,需要我们使用import语句实时调用aaa里面的变量。有点不好理解?看下面的示例:
 

from aaa import *
import aaa
print(a, id(a), aaa.a, id(aaa.a))
changeA()
print(a, id(a), aaa.a, id(aaa.a))

输出:
1 140727098794792 1 140727098794792
1 140727098794792 2 140727098794824
这证明了使用from导库的时候变量只会被导入一次,而import的方法可以实时更新导入的值。

总结:当要修改导入库的变量时,应使用import xxx的形式来实时更新变量,否则变量无法被更新导致出现问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值