深入解析Python模块引入机制
2021-03-14 10:30
标签:imp 代码 install list 扩展 编译 open() 设定 print 讲完了函数的一些概念,我们来说Python的模块引入,python里面有大量的现成的模块可以使用,不用我们自己造轮子。 1.模块的好处: 2.模块的种类: 有人说,说了这么多,到底Python模块物理上是什么,其实就是一个文件,一个python文件而已.模块的文件名就是模块的名字加上扩展名.py.(聪明的同学一定会问若有两个相同名字的模块怎么区别,哇都会抢答了,先放一下我最后回答). 下面我们从一个小例子,‘2行代码看优酷视频‘来带领大家走进我们今天的话题. 这两行代码就能看打开浏览器然后看一个视频,这个链接是Google创始人在密西根大学的一个演讲.是不是很神奇,2行搞定,其实就是引入一个模块(用现成的模块就是爽,哈哈),然后调用里面的open函数搞定了. webbrowser其实是一个文件叫webbrowser.py 里面有一个open函数. 假设你有一个HiPython目录,它的结构如下: 里面有3个文件init.py,main.py和sched.py ,这3个文件我解释一下: 100 我们看看执行main.py的时候发生了什么,首先引入了sched模块,这个模块的名字其实和标准库里面的是一模一样的。但是为啥调用我们的自己的模块,而不是标准库里面的.这是python模块搜索机制决定的. 3.Python的模块搜索机制: 当前目录: PYTHONPATH目录: 标准库的目录: 说了这么多大家也许不信,大家可以敲一下 4.模块引用的形式 2).from module import printer 3).import module as xx 5.import和from都是赋值语句 结束今天的topic之前回答开头留下的问题,张三开发了一个abc.py模块,李四开发了一个abc.py模块,如何区分呢,其实很简单是通过Python包来区分的,这一点和其他语言都是一样的. 最后说一下Python标准库里有很多现成的非常好的模块,对于初学者有的时候想查看这些模块的详细用法。这里我推荐大家去看官方的文档链接:https://docs.python.org ,然后选择你对应的Python版本是2.7还是py3.5的,里面有模块的每一个api用法介绍和实例,非常有用. 好了Python的模块引入机制就讲到这里啦,希望能给初学者一些启发 深入解析Python模块引入机制 标签:imp 代码 install list 扩展 编译 open() 设定 print 原文地址:https://blog.51cto.com/15009341/2553711
a).打个比方我们要造一个自行车,我们并不需要去制造橡胶,钢筋,轮胎,我们只需要买一些现成的轮子,龙头,把手,组装一下就可以了。Python也是这样,我们有的时候代码需要一些功能,而这些功能在标准库里面或者第三方库里面早就写好我的,我们要做的就是引入而已.
b).当你的代码量变大的时候,你肯定需要封装和抽象,要提高可维护性,必须要把你的功能函数模块化.
c).模块还可以避免函数名和变量名冲突。相同名字的函数和变量完全可以分别存在不同的模块中,java里面也有类似的概念.
1)用户自己写的自定义模块
2)Python标准库模块
3)第三方模块//通过pip install
import webbrowser
webbrowser.open("http://v.youku.com/v_show/id_XNDc2NDk5OTI0.html?from=s1.8-1-1.2&spm=a2h0k.8191407.0.0")
webbrowser.py
def open():
... 下面我们就详细讲一下
|-----init.py
|-----main.py
|-----sched.py
====sched.py===
a=100
====main.py====
import sched
print sched.a
1)程序的当前目录
2)PYTHONPATH目录,也就是环境变量里面设置的PYTHON目录
3)标准库的目录
也就是你程序运行的主目录,Python会首先在主目录内搜索导入的文件,这个目录总是被先搜索.
有同学会说这个是什么东东,这个其实就是环境变量,一般安装程序之后都会电脑上面设置一些环境变量的路径。不行你话win用户你可以在
我的电脑/高级系统设置/高级/环境变量 点开看看
Python自动搜索标准库安装在机器上的那些目录,比如C:\Python27\lib
import sys
print(‘The PYTHONPATH is‘, sys.path)
里面就是包含里python 模块搜索目录list,看一下你就茅塞顿开啦!
1).import module
这种是完全引入,比如import os ,就会把os下面的所有的变量,函数,类全部引入。然后你调用模块的函数只需要敲os.listdir(),就可以调用里面的listdir()函数。
但是这种引入会有一个弊端,就是有一些函数你不需要用到,但是因为你的全部引入,这样当你引入外部模块很多的时候,比较浪费性能,开销比较大,所以我们推荐第二种引入方法
部分引入,就是你只引入你需要的函数,而且还有一个好处就是直接在脚本中使用复制后的变量名。
比如直接敲printer(‘Hi Python‘)而不用敲module.printer(‘Hi Python‘),可以少敲一些字
这其实就是别名,比如import numpy as np ,其实就是少敲一些字,np是numpy的别名而已.
就跟def一样,import和from都是可执行语句,而不是编译期间的声明。千万要记住python的动态编译的,只有到执行的时候,python才会运行这些语言.而且可以套嵌在if语句中,如果大家看过一些开源库的源代码就会发现有大量的这样的用法.