在Python中有一个概念叫做模块(module),这个和C语言中的头文件以及Java中的jar包很类似。比如在Python中要调用sqrt函数,必须用import关键字引入math这个模块。
以下是一个导入模块使用的例子:
import random#引入random模块
print(random.randint(0,5))
import
引入Python的模块我们需要使用import
关键字。
语法:import module1,[module2],[module3]...
并且命令要放在脚本的顶部。
一个模块只会被导入一次,不管你执行了多少次import。这样可以防止导入模块被一遍又一遍地执行。
我们如果想使用导入模块中的某一方法我们需要带上模块名:
import random
print(randint(0,5)) #不加模块名,出错
print(random.randint(2,5)) #正确
搜索路径:
当解释器遇到 import 语句,如果模块在当前的搜索路径就会被导入。搜索路径是由一系列目录名组成的,Python解释器就依次从这些目录中去寻找所引入的模块。搜索路径被存储在sys模块中的path变量
注意第一个字符串是空串,这代表当前目录。如果我在脚本中运行就可以看见具体的目录。
from…import
使用import
我们可以导入整个模块,同时Python提供了from…import
让我妈可以导入某一模块中具体的某个部分,在使用此方法时我们就不需要带上模块名了。
语法:from module improt part,[part2],[part3],...
from random import randint
print(randint(0,5))
如果我们使用from module import *
可以导入module中的所有。
深入模块
__name__属性
创建模块module1.py:
def add(a,b):
return a+b
#测试
print(add(1,2))
导入模块并测试:
import module1
print(module1.add(5,5))
由于一个模块被引入时它的主程序会运行一次,所以出现了模块中的测试结果3
。如果我们想在模块被引入时,模块中的某一程序块不执行,我们可以用__name__
属性来使该程序块仅在该模块自身运行时执行。
修改module1.py:
def add(a,b):
return a+b
#测试
if __name__=="__main__":
print(add(1,2))
每个模块都有一个__name__属性,当其值是’__main__’时,表明该模块自身在运行,否则是被引入。__name__ 与 __main__ 底下是双下划线。
dir() 函数
dir() 函数可以找到模块内定义的所有名称。以一个字符串列表的形式返回。
包
Python中的包与JAVA中的包类似,为什么说类似呢?因为Python的包也是目录,不过,要想成为包则在目录下要有一个__init__.py
文件。
在Python2中必须有__init__.py文件,而在Python3中则不需要但是即使有也不会错,所以我们同意都加上这个文件。
当我们使用from package import *
时会将package中的所有模块都导入,但是,如果__init__.py
中存在一个叫做__all__
的列表变量,那么在使用 from package import *
的时候就只把这个列表中的所有名字作为包内容导入。所以作为包的作者,可别忘了在更新包之后保证 __all__
也更新了啊!