为何在python 目录找不到time模块 sys模块等 是由于C语言实现的内置到解释器里面的
import 是如何工做的:有以下2个文件
模块html
在计算机程序的开发过程当中,随着程序代码越写越多,在一个文件里代码就会愈来愈长,愈来愈不容易维护。python
为了编写可维护的代码,咱们把不少函数分组,分别放到不一样的文件里,这样,每一个文件包含的代码就相对较少,不少编程语言都采用这种组织代码的方式。在Python中,一个.py文件就称之为一个模块(Module)。web
使用模块有什么好处?ajax
最大的好处是大大提升了代码的可维护性。编程
其次,编写代码没必要从零开始。当一个模块编写完毕,就能够被其余地方引用。咱们在编写程序的时候,也常常引用其余模块,包括Python内置的模块和来自第三方的模块。dom
因此,模块一共三种:编程语言
另外,使用模块还能够避免函数名和变量名冲突。相同名字的函数和变量彻底能够分别存在不一样的模块中,所以,咱们本身在编写模块时,没必要考虑名字会与其余模块冲突。可是也要注意,尽可能不要与内置函数名字冲突。函数
一般包老是一个目录,可使用import导入包,或者from + import来导入包中的部分模块。包目录下为首的一个文件即是 __init__.py。而后是一些模块文件和子目录,假如子目录中也有 __init__.py 那么它就是这个包的子包了。(若是__init__文件,python 2是不支持导入的,可是测试python 3支持)post
原来在python模块的每个包中,都有一个__init__.py文件(这个文件定义了包的属性和方法)而后是一些模块文件和子目录,假如子目录中也有 __init__.py 那么它就是这个包的子包了。当你将一个包做为模块导入(好比从 xml导入 dom )的时候,实际上导入了它的 __init__.py 文件。测试
一个包是一个带有特殊文件 __init__.py 的目录。__init__.py 文件定义了包的属性和方法。其实它能够什么也不定义;能够只是一个空文件,可是必须存在。若是 __init__.py 不存在,这个目录就仅仅是一个目录,而不是一个包,它就不能被导入或者包含其它的模块和嵌套包。
若是不一样的人编写的模块名相同怎么办?为了不模块名冲突,Python又引入了按目录来组织模块的方法,称为包(Package)。
举个例子,一个abc.py
的文件就是一个名字叫abc
的模块,一个xyz.py
的文件就是一个名字叫xyz
的模块。
如今,假设咱们的abc
和xyz
这两个模块名字与其余模块冲突了,因而咱们能够经过包来组织模块,避免冲突。方法是选择一个顶层包名:引入了包之后,只要顶层的包名不与别人冲突,那全部模块都不会与别人冲突
列:
有个abcd.py文件和 testa 同级目录
导入包 testa的时候 实际上就是 在执行testa里面的 __init__.py 这个文件
导入推荐写法:
from testa import scla
from testa.scla import show
from testa.web1 import scla
from testa.web1.scla import show
from testa import web1 #执行__init__文件
web1.scla.show(1) #之前的python老版本这样执行会报错 ;新版本支持了
为何在python 目录找不到time模块 sys模块等 是由于C语言实现的内置到解释器里面的
import 是如何工做的:有以下2个文件
test.py里面导入import scla文件的时候,会先执行一遍scla.py文件,而后吧scla.py文件的内容所有获取过来给scla(也就是import scla)
执行结果:
sys.path路劲以下:能够看出来了第一搜索路径是当前目录
['D:\\xxxx\\testa', 'D:\\Study', 'C:\\Program Files (x86)\\Python36-32\\python36.zip', 'C:\\Program Files (x86)\\Python36-32\\DLLs', 'C:\\Program Files (x86)\\Python36-32\\lib', 'C:\\Program Files (x86)\\Python36-32', 'C:\\Users\\Think\\AppData\\Roaming\\Python\\Python36\\site-packages', 'C:\\Program Files (x86)\\Python36-32\\lib\\site-packages', 'C:\\Program Files (x86)\\Python36-32\\lib\\site-packages\\win32', 'C:\\Program Files (x86)\\Python36-32\\lib\\site-packages\\win32\\lib', 'C:\\Program Files (x86)\\Python36-32\\lib\\site-packages\\Pythonwin', 'C:\\Program Files\\JetBrains\\PyCharm 2018.1.1\\helpers\\pycharm_matplotlib_backend']
importlib 使用
结果: