最近复习python基础,遇到一个知识点,不太好理解,故此做出笔记记录一下
结论
from A import B:在导入的过程中,创建模块对象,将模块对象的引用保存在本地作用域,并且可以在本地修改B的属性值,且不影响其他模块调用B的属性值(仅仅只修改的是本地作用域中B的属性值)
import A :在导入模块的过程 创建模块对象 将模块对象的引用保存在本地,调用B时,使用的是A.B的形式。当在本地作用域修改B的值后,影响其他模块调用B的属性值。
上述内容可能不太容易理解,且看下面代码的实现结果
区别:
- 调用的区别
from 模块名 import 属性名
# 调用
a = 属性名
import 模块名
# 调用
a = 模块名.属性名
- 私有属性的区别
from 模块 import * : 导入模块时,会跳过私有属性;
import 模块 : 通过引用可以访问私有属性
- 调用过程中属性值的变化
使用 from A import B 的方式观察运行结果
# 在common 模块定义公共属性值
common.py
HANDLE_FLAG = False
# 在 test2 模块中定义调用 common 模块的函数
test2.py
import common
def ts():
print(common.HANDLE_FLAG)
# 在 test1 模块中调用 common 模块的属性
test1.py
from common import HANDLE_FLAG
import test2
print(HANDLE_FLAG)
HANDLE_FLAG = True
test2.ts()
print(HANDLE_FLAG)
结果:
False
False
True
使用import A 的方式观察运行结果
==将上述代码中的 test.py 更改为如下格式==
import common
import test2
print(common.HANDLE_FLAG)
common.HANDLE_FLAG = True
test2.ts()
print(common.HANDLE_FLAG)
结果:
False
True
True
回顾之前的结论可以发现,当使用from引入的时候,不会影响其他模块调用所引入的值,但import不行。故,一定要注意此区别所带来的影响。