[Python Basics]引用系统(The Import System)
欲上高楼去避愁,愁还随我上高楼。经行几处江山改,多少亲朋尽白头。
归休去,去归休。不成人总要封侯?浮云出处元无定,得似浮云也自由。
我从短暂的Python工作当中学到一件事,越是模块化,就越会发现python看似普通的import是大有玄机的。
- python引用python文件时的搜索路径往往都是当前terminal的pwd。(可以在sys还是os模块下append预期的路径)
- python在引用文件是看起来有点像是执行了一遍那个文件。
- 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)的更多相关文章
- Python获取当前系统时间
Python获取当前系统时间 import time #返回当前时间 def GetNowTime(): return time.strftime("%Y-%m-%d %H:%M:% ...
- 关于python如何引用excel文件
关于python如何引用excel文件 import pandas as pd #引用pandas库,as:将pandas简写为pd Nowcoder = pd.read_excel("1. ...
- Python语法31[module/package+import]
一 module 通常模块为一个文件,直接使用import来导入就好了.可以作为module的文件类型有".py".".pyo".".pyc" ...
- 课程一(Neural Networks and Deep Learning),第二周(Basics of Neural Network programming)—— 3、Python Basics with numpy (optional)
Python Basics with numpy (optional)Welcome to your first (Optional) programming exercise of the deep ...
- 关于Python Package下的Module import方式[转]
2012年有一个目标我没有达成,那就是深入学习和使用Python语言.这个目标被其他学习任务和工作无情的抢占了,当然最主要的原因还是我重视不够^_^. 近期恰逢有一些Python工程的开发工作要做,就 ...
- 在python中引用jar包
在本文中,首先创建一个maven项目,然后打包成jar包,在python中调用jar包,执行java类方法. 1.在eclipse中创建maven项目 我这里创建一个普通java项目,择选择 “mav ...
- 笔记-Python-language reference-5.the import system
笔记-Python-language reference-5.the import system 前言 经常用到import,module,对其中的机制及原理有一定的了解,但没有将各种信息前后连通起来 ...
- python基础--自定义模块、import、from......import......
自定义模块.import.from......import...... 1)模块的定义和分类 1.模块是什么? 我们知道一个函数封装了一个功能,软件可能是有多个函数组成的.我们说一个函数就是一个功能, ...
- 疯狂java笔记(五) - 系统交互、System、Runtime、Date类
一.程序与用户交互(Java的入口方法-main方法): 运行Java程序时,都必须提供一个main方法入口:public static void main(String[] args){} publ ...
随机推荐
- sqlite修改表、表字段等与sql server的不同之处
sqlite中只支持 ALTER TABLE 命令的 RENAME TABLE 和 ADD COLUMN. 其他类型的 ALTER TABLE 操作如 DROP COLUMN,ALTER COLUMN ...
- mysql里面的时间获取(格式年月日)
1.当前日期 select DATE_SUB(curdate(),INTERVAL 0 DAY) ; 2.明天日期 select DATE_SUB(curdate(),INTERVAL -1 DAY) ...
- 【algo&ds】1.时间复杂度和空间复杂度分析
1.时间复杂度分析O(f(n)) 分析方法 只关注循环执行次数最多的一段代码 加法原则 乘法原则 高优先级原则 常见时间复杂度量级 多项式量级和非多项式量级.其中,非多项式量级只有两个:O(2^n) ...
- 替换"marquee",实现无缝滚动
js的marquee标签,可以实现元素循环滚动,但是不能无缝连接,要实现“无缝滚动”的效果必须使用js(借鉴百度),思路是使要滚动元素相对位置不断改变,上下滚动就相对top或者bottom,左右滚动就 ...
- ffmpeg centos yum安装
CentOS 6&7安装ffmpeg CentOS 6和7安装方法是不一样的,下面分别说明: 安装前都需要先安装epel扩展源 yum -y install epel-release ce ...
- nyoj 58-最少步数 (BFS)
58-最少步数 内存限制:64MB 时间限制:3000ms Special Judge: No accepted:17 submit:22 题目描述: 这有一个迷宫,有0~8行和0~8列: 1,1,1 ...
- requests模块发送带headers的Get请求和带参数的请求
1.在PyCharm开发工具中新建try_params.py文件: 2.try_params.py文件中编写代码: import requests#设置请求Headers头部header = {&qu ...
- 领扣(LeetCode)移动零 个人题解
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序. 示例: 输入: [0,1,0,3,12] 输出: [1,3,12,0,0] 说明: 必须在原数组上操作, ...
- python:正则1
鱼c(扩展阅读): Python3 如何优雅地使用正则表达式(详解一) Python3 如何优雅地使用正则表达式(详解二) Python3 如何优雅地使用正则表达式(详解三) Python3 如何优雅 ...
- Docker从入门到掉坑(三):容器太多,操作好麻烦
前边的两篇文章里面,我们讲解了基于docker来部署基础的SpringBoot容器,如果阅读本文之前没有相关基础的话,可以回看之前的教程. Docker 从入门到掉坑 Docker从入门到掉坑(二): ...