类
类的概念在许多语言中出现,很容易理解。它将数据和操作进行封装,以便将来的复用。形如:
class Cmd(object):
def __init__(self):
pass
def add_cmd(self):
pass
def run_cmd(self):
pass
模块
模块,在Python可理解为对应于一个文件。在创建了一个脚本文件后,定义了某些函数和变量。你在其他需要这些功能的文件中,导入这模块,就可重用这些函数和变量。
模块名
模块名就是文件名去掉.py后缀
模块导入
我们在模块中定义了一些函数和变量,为了能够复用我们可以使用import语句进行模块导入,包括导入整个模块、导入函数名、导入变量名
-
from module import names
可以直接从模块中导入名字到符号表,但模块名字不会被导入 -
import module
整个模块 -
from module import *
可以把模块中的所有名字全部导入,除了那些以下划线开头的名字符号。不建议使用,不清楚导入了什么符号,有可能覆盖自己定义的东西 -
内建函数dir()
可以查看模块定义了什么名字(包括变量名,模块名,函数名等)
模块搜索路径
当导入一个模块时,解释器先在当前包中查找模块,若找不到,然后在内置的built-in模块中查找,找不到则按sys.path给定的路径找对应的模块文件
sys.path的初始值来自于以下地方:
- 包含脚本当前的路径,当前路径
- PYTHONPATH
- 默认安装路径
在运行过程中我们还可以insert()或者append()动态修改sys.path的值
其他
模块能像包含函数定义一样,可包含一些可执行语句。这些可执行语句通常用来进行模块的初始化工作。这些语句只在模块第一次被导入时被执行。
模块在被导入执行时,python解释器为加快程序的启动速度,会在与模块文件同一目录下生成.pyc文件。.pyc是经过编译后的字节码,这一工作会自动完成,而无需程序员手动执行
包(package)
包是一个有层次的文件目录结构,它定义了由n个模块或n个子包组成的python应用程序执行环境。
通俗一点:包是一个包含__init__.py 文件的目录,该目录下一定得有这个__init__.py文件和其它模块或子包。常见的包结构如下:
package_a
├── __init__.py
├── module_a1.py
└── module_a2.py
若想要引用包中的模块或者模块下的变量或者函数可以使用以下语句:
# 导入模块
from package_a import module_a1
import package_a.module_a1
# 导入模块中的名字
from package.module import names
常见问题
引入某一特定路径下的模块
-
使用sys.path.append(yourmodulepath)
将一个路径加入到python系统路径下,避免每次通过代码指定路径 -
利用系统环境变量 export PYTHONPATH=$PYTHONPATH:yourmodulepath,
-
直接将这个路径链接到类似/Library/Python/2.7/site-packages目录下
好的建议
- 经常使用if __name__ == ‘__main__’,保证你写包既可以import又可以独立运行,用于test.
- 多次import不会多次执行模块,只会执行一次。可以使用reload来强制运行模块,但不提倡.