模块
简介
为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式。在Python中,一个.py文件就称之为一个模块(Module)。
好处
- 大大提高了代码的可维护性。
- 其次,编写代码不必从零开始。
- 使用模块还可以避免函数名和变量名冲突。相同名字的函数和变量完全可以分别存在不同的模块中, 建议不要与内置函数冲突
- 按目录来组织模块的方法,称为包; 避免不同人编写同名模块
import sys
def test():
args = sys.argv
if len(args)==1:
print('Hello, world!')
elif len(args)==2:
print('Hello, %s!' % args[1])
else:
print('Too many arguments!')
if __name__=='__main__':
test()
规则
模块名要遵循Python变量命名规范,不要使用中文、特殊字符;
模块名不要和系统模块名冲突,最好先查看系统是否已存在该模块,检查方法是在Python交互环境执行import abc,若成功则说明系统存在此模块。
作用域
在Python中,是通过_前缀来实现的。
- 正常的函数和变量名是公开的(public),可以被直接引用,比如:abc,x123,PI等;
- xxx__这样的变量是特殊变量,可以被直接引用,但是有特殊用途,比如上面的__author,name,__doc__就是特殊变量,我们自己的变量一般不要用这种变量名;
- _xxx和__xxx这样的函数或变量就是非公开的(private),不应该被直接引用,比如_abc,__abc等
def _private_1(name):
return 'Hello, %s' % name
def _private_2(name):
return 'Hi, %s' % name
# 提供给外部的public, 否则private
def greeting(name):
if len(name) > 3:
return _private_1(name)
else:
return _private_2(name)
print(greeting("zhangsan"))
安装第三方模块
安装第三方模块,是通过包管理工具pip完成的。
Mac或Linux: 省略安装pip工具
Win: 安装python时, 确保安装时勾选了pip和Add python.exe to Path。
验证: cmd/shell, 执行pip/pip3
安装的第三方模块都应该注册到pypi.python.org
pip install Pillow
常用模块
常用Pillow,以及MySQL驱动程序,Web框架Flask,科学计算Numpy, 使用pip安装费时费力
推荐Anaconda, 批量安装
模块搜索路径
当我们试图加载一个模块时,Python会在指定的路径下搜索对应的.py文件,如果找不到,就会报错:
import mymodule
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named mymodule
-
默认情况下,Python解释器会搜索当前目录、所有已安装的内置模块和第三方模块,搜索路径存放在sys模块的path变量中:
import sys sys.path
新增搜索目录的方式:
- 直接修改sys.path,添加要搜索的目录:sys.path.append(’/Users/michael/my_py_scripts’); 运行时修改,运行结束后失效。
- 设置环境变量PYTHONPATH,该环境变量的内容会被自动添加到模块搜索路径中。