模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py。模块可以被别的程序引入,以使用该模块中的函数等功能。这也是使用python 标准库的方法。
一、import语句
使用 Python 源文件,只需在另一个源文件里执行 import 语句,语法如下import module1[, module2[,... moduleN]
当解释器遇到 import 语句,如果模块在当前的搜索路径就会被导入。搜索路径是一个解释器会先进行搜索的所有目录的列表,以下为一个demo
- test.py文件,用于其他文件导入
def test():
print("hello import")
- test2.py文件,引入test.py
import test
test.test()
输出:hello import
一个模块只会被导入一次
,不管你执行了多少次import。这样可以防止导入模块被一遍又一遍地执行。当我们使用import语句的时候,Python解释器是怎样找到对应的文件的呢?这就涉及到Python的搜索路径,搜索路径是由一系列目录名组成的,Python解释器就依次从这些目录中去寻找所引入的模块。这看起来很像环境变量,事实上,也可以通过定义环境变量的方式来确定搜索路径。搜索路径是在Python编译或安装的时候确定的,安装新的库应该也会修改。搜索路径被存储在sys模块中的path变量
二、from...import语句
Python 的 from 语句让你从模块中导入一个指定的部分到当前命名空间中
from modname import name1[, name2[, ... nameN]]
例如对上面导入的test.py进行改变,增加一个方法
def print1():
print("hello import")
def print2():
print("no hello")
进行导入:
from test import print1
print1()
只导入print1方法
三、from...import* 语句
把一个模块的所有内容全都导入到当前的命名空间也是可行的
from test import*
print1()
print2()
四、__name__属性
一个模块被另一个程序第一次引入时,其主程序将运行。如果我们想在模块被引入时,模块中的某一程序块不执行,我们可以用__name__属性来使该程序块仅在该模块自身运行时执行:
- 定义一个被导入类:test.py
def print1():
print("hello import")
def print2():
print("no hello")
if __name__ == '__main__':
print("主程序在运行")
else:
print("其他在运行")
- 定义一个模块test2.py导入test.py
from test import*
print1()
运行test.py时会输出:主程序在运行
运行test2.py输出:
其他在运行
hello import
四、dir()方法
内置的函数 dir() 可以找到模块内定义的所有名称。以一个字符串列表的形式返回
import test
print(dir(test))
返回:['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'print1', 'print2']
五、包
包是一种管理 Python 模块命名空间的形式,采用"点模块名称"。比如一个模块的名称是 A.B, 那么他表示一个包中的子模块A和B 。就好像使用模块的时候,你不用担心不同模块之间的全局变量相互影响一样,采用点模块名称这种形式也不用担心不同库之间的模块重名的情况,
在导入一个包的时候,Python 会根据 sys.path 中的目录来寻找这个包中包含的子目录。目录只有包含一个叫做 __init__.py 的文件才会被认作是一个包,主要是为了避免一些滥俗的名字(比如叫做 string)不小心的影响搜索路径中的有效模块
如果想导入一个包中的所有模块,可以使用form package import *
本文到此结束了,如果发现有问题可以在下方评论留言