码迷,mamicode.com
首页 > 编程语言 > 详细

[Python Basics]引用系统(The Import System)

时间:2019-12-01 09:47:07      阅读:86      评论:0      收藏:0      [点我收藏+]

标签:引用   块对象   命名   package   理解   引入   创建   机制   err   

欲上高楼去避愁,愁还随我上高楼。经行几处江山改,多少亲朋尽白头。
归休去,去归休。不成人总要封侯?浮云出处元无定,得似浮云也自由。

我从短暂的Python工作当中学到一件事,越是模块化,就越会发现python看似普通的import是大有玄机的。

  1. python引用python文件时的搜索路径往往都是当前terminal的pwd。(可以在sys还是os模块下append预期的路径)
  2. python在引用文件是看起来有点像是执行了一遍那个文件。
  3. python的相对路径真的限制好多,在我看来似乎是在套娃的时候才能用?

所以啊,我不作不明白Python引用机制的人啦!JOJO!

技术图片

Python Software Foundation学习到的引用系统(ImportSystem):

当一个import命令被执行的时候,程序将执行标准库中的__import__()函数。值得注意的是如果使用importlib.import_module()可以绕过该函数使用自己的引用机制。

当一个模块被第一次引入的时候,Python会查找该模块,如果找到的话就会创建一个模块对象(module object)。否则raise ModuleNotFoundError

Package

Python中Package的概念是用来管理纷繁的模块的结构化的。一般的理解是Package是一个文件夹,而Module是一个单独的文件。但其实Package只是Module的子类,唯一的区别是Package具有一个Module不具有的变量__path__

从Package中引入子包(subpackage)的时候主包(parent package)的__init__.py也会被执行(想要拿到小套娃必须打开大套娃的概念)

这是一个例子

parent/
    __init__.py
    one/
        __init__.py
    two/
        __init__.py
    three/
        __init__.py

如果我们执行import parent.one时我们会先执行parent.__init__.py然后再执行one.__init__.py.

命名空间包

(啊,看到这个namespace就一个头两个大)
技术图片

命名空间是对python中对象的索引系统。命名空间包主要解决的是程序目标模块不当前文件系统(以压缩包、网络位置等形式存在)的情况。目前没有遇到过这种应用环境,就先不详细理解了。

模块查找

这块是比较重要的┗|`O′|┛ 嗷~~

这个包已经引入了呦

所有已经引入的包都在sys.modules储存着从而避免重复导入。

看到目前为止,我的疑惑还没有解答。。。但已经很困了,有缘再来系列?

[Python Basics]引用系统(The Import System)

标签:引用   块对象   命名   package   理解   引入   创建   机制   err   

原文地址:https://www.cnblogs.com/ziangzhang/p/11964991.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!