1、模块的作用
在交互模式下输出的变量和函数定义,一旦终端重启后,这些定义就都不存在了,为了持久保存这些变量、函数等的定义,Python中引入了模块(Module)的概念。一个Python模块其实就是一个脚本文件,具有后缀“.py”,例如 hello.py 就是一个模块文件名,和普通文件一样可以被永久保存在本地存储磁盘中。
2、模块的内容
Python模块中存放的是一些程序代码,例如,变量定义、函数定义或是代码语句。下面是hello.py模块的内容,其中有一个变量 a,一个函数 fun(),和一个打印语句。
# -*- coding:UTF-8 -*- #! /usr/bin/python3 a = [1, 2, 3] def fun(): return ‘fun()‘ print(‘hello‘, fun(), a)
这里介绍一个模块属性 __name__ ,该属性存储了当前模块的名称,比如,上面的 hello.py 其__name__就是 ‘hello.py‘
3、模块的使用
(1)第一种方式时将模块当做脚本执行,模块中的代码语句会得到执行
wuhui@wuhui-H55M-S2H:~/Desktop$ python3 hello.py hello fun() [1, 2, 3]
(2)第二种方式时将模块导入,然后使用导入模块中定义的变量、函数等
>>> import hello >>> hello.a [1, 2, 3] >>> hello.fun() ‘fun()‘使用"import module"导入模块方式时,被导入模块不能带后缀;使用导入模块中定义的变量、函数时,必须使用模块名作为前缀,如"hello.a"而不是直接使用"a"。如果感觉这样麻烦的,可以使用下面的方式,将模块中所有的定义信息全部导入。
>>> from hello import * >>> a [1, 2, 3] >>> fun() ‘fun()‘
4、模块的相关信息
每个模块都有自己的定义信息,包括变量、函数等以及一些“与生俱来”的内建变量,这些可以通过Python内建函数 dir() 来查看。
直接在终端下输出dir(),输出当前环境下的变量名
>>> dir() [‘__builtins__‘, ‘__doc__‘, ‘__loader__‘, ‘__name__‘, ‘__package__‘, ‘__spec__‘]
导入上面的 hello.py 模块后,使用dir()查看,不仅输出了默认的的变量名,还输出了hello.py中我定义的变量a和函数fun的名称
>>> import hello >>> dir(hello) [‘__builtins__‘, ‘__cached__‘, ‘__doc__‘, ‘__file__‘, ‘__loader__‘, ‘__name__‘, ‘__package__‘, ‘__spec__‘, ‘a‘, ‘fun‘]
输出模块名
>>> print(hello.__name__)
hello
hello
5、模块的搜索路径
当导入模块时,Python按照一定的搜索顺序在指定的目录下搜索模块,如果找到则导入模块,否则会引发异常。例如,执行 “import hello”导入hello.py模块时,Python解释器首先根据模块名搜索内建模块;如果没有找到,则会去 sys.path 变量所列出的目录下搜索,sys.path的默认目录如下:
(1)输入脚本所在目录(或当前目录,如果没有指定导入脚本,如 import ×)
(2)环境变量 PYTHONPATH 所指定的目录(这个与系统环境变量中的PATH语法相同)
(3)安装的目录(默认)
如果导入的脚本是一个符号连接(Windows上的快捷方式),搜索目录是符号链接所连接的原始文件所在目录,而非符号连接所在目录。在Python解释器初始化之后,可以在程序中修改 sys.path
参考:
[1] The Python Tutorial
https://docs.python.org/3/tutorial/modules.html