小知识,大挑战!本文正在参与“程序员必备小知识”创作活动
python 模块
python模块(module)就是一个以.py结尾的python文件,包含了python对象定义和python语句,模块能让你能够有逻辑的组织你的代码段,也可以说是代码分类,不同功能的代码段放置在不同的模块中,这样就能让代码更清晰更易懂。模块中可以定义函数,类和变量,同时模块中也可以包含可执行代码。
通俗的讲:模块就相当于是一个工具包,工具包中有很多工具(函数,变量等),当我们想使用这个工具包(模块)中的工具(函数)时,就需要打开这个工具包然后把工具拿出来使用,运用到代码中就是,导入这个模块然后使用模块中的函数等。
定义示例:
#support.py模块
def print_func():
print("Hello World!")
import语句
上面说到,不同的功能会放到不同的模块中,如果一个模块用到了另一个模块中的功能,则需要把另一个模块导入进来才能使用。这时就需要用import来进行导入,语法如下:
import module1,module2...
要用到模块中的函数时,需这样调用:
模块名.函数名
比如要想在test.py 模块中引用上面刚刚定义好的support模块中的print_func函数,就可以在test.py模块文件的开头用import support 来导入
#test.py模块
import support
support.print_func()
当解释器遇到import语句时,如果模块在当前的搜索路径就会被导入。
想一想这里为什么要加上模块名来调用呢?
因为可能存在这样一种情况:在有多个模块含有相同名称的函数时,此时如果直接写函数名,解释器无法知道到底要调用哪个函数,所以如果用import 模块名这种方式来导入模块时,调用函数必须加上模块名。如:
#test.py
import support
#这样是会报错的
print_func()
#这样是正确的调用方式
support.print_func()
from ... import
有时候我们只需要用到模块中的某个或某几个函数,这时就只需要直接导入要用到的函数即可,没必要把整个模块都导入。此时就可以用from xxx import xxx来实现:
from 模块名 import 函数1,函数2
不仅可以导入函数,还可以导入全局变量,类等等。这种方式导入的话,需要注意的是,在调用函数时必须直接写函数名,而不能用模块名.函数名,但是当两个模块中含有相同名称的函数时,后面导入的会把前面导入的覆盖掉。比如模块a中有个函数print_func(),模块b中也有个函数print_func(),如果先导入a中的print_func,再导入b中的print_func,那么当调用print_func时,只会执行b中的函数。
代码示例
#test.py
from support import print_func
#直接使用,无需加模块名
print_func()
from xxx import *
如果想把一个模块中的所有内容全都导入到当前的命名空间也是可行的。只需如下语句即可:
from modulename import *
这提供了一个简单的方法来导入一个模块中的所有项目,然而这种声明不推荐被过多的使用
as语法
有时候模块名或函数名过长,想给模块名取个别名也是可以的,语法如下:
import support as sp
from spport import print_func as pf
这时无论是使用模块support还是要使用函数print_func都必须用别名sp或pf,而不能再使用原来的名称了,否则就会报错。
定位模块
当你导入一个模块时,python解释器会按如下顺序对模块进行搜索:
- 当前找到目录
- 如果不在当前目录,python则会搜索在shell变量PYTHONPATH下的每个目录
- 如果都找不到,python会查看默认路径,一般为安装目录。
- 模块搜索路径存储在sys模块的path变量中。变量里包含当前目录,PYTHONPATH和安装过程的默认路径。