python可以通过python解释器来进行编程,也就是编写一些小程序。当编写大程序的时候,我们就会把我们的代码定义到.py文件中。这个文件就被成为模块。模块就是包含所有你定义的函数和变量的文件。模块可以被别的程序引入,以使用该模块中的函数等功能。在使用python标准库的时候我们常常需要导入一些模块,导入模块使用import,看下面的例子:
#导入sys模块
import sys
#sys.path包含了一个 Python 解释器自动查找所需模块的路径的列表
print(sys.path)
输出结果:
['E:\\workspace-python\\firstpython', 'E:\\workspace-python\\firstpython', 'D:\\python3.5\\DLLs', 'D:\\python3.5\\lib', 'D:\\python3.5', 'D:\\python3.5\\lib\\site-packages', 'D:\\python3.5\\python35.zip']
import语句的基本用法如下
import module1[, module2[,... moduleN]
import语句会在sys.path的列表中搜索要导入的的模块,如果找到就导入,如果没找到就报错。
下面我们定义两个个模块main.py和mymoudule.py,如下:
mymoudule.py代码如下:
def hello():
print("hello")
在main.py导入py和mymoudule.py并调用其方法。如下:
import mymoudule
mymoudule.hello()
import语句是导入整个模块,然后通过模块名加“.”的方法调用模块中的变量和方法。有时候我们只需要导入模块中的一部分。这时候就需要使用from…import语句,结构如下:
from modname import name1[, name2[, ... nameN]]
我们修改mymoudule.py代码如下:
def hello():
print("hello")
def go():
print("go go go")
class People:
def eat(self):
print("eat")
修改main.py代码如下:
from mymoudule import go
from mymoudule import People
go()
p = People()
p.eat()
输出结果:
go go go
eat
另外,把一个模块的所有部分导入,也是可行的,使用From…import * 就可以了。
修改代码如下:
from mymoudule import *
go()
p = People()
p.eat()
输出结果完全一致。
一个模块被另一个程序第一次引入时,其主程序将运行。如果我们想在模块被引入时,模块中的某一程序块不执行,我们可以用name属性来使该程序块仅在该模块自身运行时执行。修改mymoudule.py代码:
if __name__ == "__main__":
print("自身执行")
else:
print("其他模块执行")
直接执行mymoudule.py以及在main.py中导入,查看结果。
如果我们需要编写很多的模块,众多的模块堆积在一起虽然是可行的,但是很不方便管理。所以就引入了包,包用来管理模块。我们创建一个包,并在包下创建一个模块,我们看到创建包时会自动生成一个init.py的模块,这个模块时用来初始化包的,只会执行一次。在导入包下的模块时我们可以使用import 包名.模块名 as 的形式。看下面的例子:
_init_.py代码:
print("init animal pakage")
bird.py代码:
def fly():
print("fly")
main.py代码:
import animal.bird as bird
bird.fly()
#也可以使用 from.... import 的形式
from animal.bird import fly
fly()
输出结果如下:
init animal pakage
fly
fly