美文网首页
from ... import 与 import ... 之间的

from ... import 与 import ... 之间的

作者: aport | 来源:发表于2019-09-29 17:28 被阅读0次

    最近复习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不行。故,一定要注意此区别所带来的影响。

相关文章

网友评论

      本文标题:from ... import 与 import ... 之间的

      本文链接:https://www.haomeiwen.com/subject/owtqpctx.html