python基础教程 | 模块
模块用于定义
Q1 模块在第一次导入的时候做了什么?
- 定义函数
- 定义类
- 定义赋值后的变量
于是上面的函数、类、赋值后的变量就成了它的特性.
Q2 如何区分它是被导入还是被直接执行?
被导入的时候:__name__
值是模块的名字
被直接执行的时候:__name__
值是__main__
如何让模块可用
可用:是指在import你的模块的时候解释器能够找到你的模块,才能在解释器里使用。
- 把模块放在解释器找得到的位置
# sys.path的目录就是解释器的搜索路径,pprint提供智能打印:打印出来的目录都可以放,推荐放site-packages目录
import sys,pprint
pprint.pprint(sys.path)
- 告诉解释器去哪里找
# 编辑sys.path(并不通用)
sys.path.append('c:/python')
# PYTHONPATH的环境变量配置(在每次登录都要执行的shell文件中设置环境变量)
vim ~/.bashrc
export PYTHONPATH=$PYTHONPATH:~/python;~/genedock # (路径以分号分割就好)
包
包的本质:包也是模块。模块存在文件中,包就是模块的目录,为了让Python把它当包对待,需要含一个名为__init__.py
的文件。
# 引入drawing包中的__init__模块
import drawing
# drawing中的colors模块可用,且只能带包名引用
import drawing.colors
# drawing中的shapes模块可用,可以不带包名用
from drawing import shapes
# drawing.__all__变量中的公有接口;如果没有,导入非下划线开头的全局名称
from drawing import *
探究模块
- 模块中有什么
# 使用dir:列出对象所有的特性(函数、类、变量),有些已_开头表示约定不是外部使用的
[n for n in dir(copy) if not n.startswith('_')]
输出:['Error', 'PyStringMap', 'copy', 'deepcopy', 'dispatch_table', 'error', 'name', 't', 'weakref']
# __all__变量:定义模块的公有接口
copy.__all__
输出:['Error', 'copy', 'deepcopy']
- 文档
当你的需求非常小:range的参数是什么?
print range.__doc__
如果需要更详细的文档,参考官方库。
- 使用源代码
# 模拟解释器import模块的时候去找
sys.path
# 检查模块的__file__属性
print copy.__file__
Comments
Insert your custom comment provider like Disqus or Isso here.