采用书籍Python核心编程(第二版),人民邮电出版社,2008年7月第1版。本书以Python2.5为主,但笔记主要以Python3.6为主。
模块是用来组织Python代码的方法,而包是用来组织模块的
# 导入模块推荐顺序
import Python标准库模块
import Python第三方模块
import 应用程序自定义模块
# 导入模块中的指定属性 from-import
from module import name1, name2, ...
from module import * # 导入所有属性,不推荐
# 扩展import语句的as,取别名,方便理解和记忆
import module as XXX
from module import name1 as XXX
import numpy as np
import pandas as pd
# 重新导入自定义模块需要使用imp模块中的reload方法
from imp import reload
reload(module)
系统为模块提供了一些功能上的支持。
# 1.__import__():实际上导入模块的函数
var = __import__(module_name) # 参数为字符串;返回值为对应的模块对象,所以需要将引用传给变量,否则无法使用该模块
sys = __import__('sys') # 等价于import sys
# 2.globals()和locals():返回调用者全局和局部名称空间的字典的函数
# 在全局名称下,globals()和locals()返回相同的字典,因为此时的局部名称空间就是全局空间
def foo():
print('calling foo()...')
num = 123
name = 'foo'
print("foo()'s globals:", globals().keys())
print("foo()'s locals:", locals().keys())
print("__main__()'s globals:", globals().keys())
print("__main__()'s locals:", locals().keys())
foo()
# 3.reload():重新导入模块需要使用imp模块中的reload方法
# 模块必须是全部导入(不是from-import),reload()函数的参数必须是模块自身而不是模块名字的字符串,reload()函数重新导入导致模块会执行
from imp import reload
reload(module)
包是一个有层次的文件目录结构,它定义了一个由模块和子包组成的Python应用程序执行环境。Python1.5加入了包,用来帮助解决如下问题:
# 1.目录结构
# 导入包中的模块:from package.module import sub_module
# 模块下的__init__.py 文件,用于初始化模块。
# 2.使用from-import导入包:
# from package import * # 导入package.module下的所有模块(__all__变量中定义的)
# __init__.py 中的 __all__ 变量包含执行该语句时应该导入的模块名字符串列表。
# 3.绝对导入
# 所有的导入都被认为是绝对的,即这些被导入的模块必须通过Python路径(sys.path或是PYTHONPATH)来访问。
# 4.相对导入
from Phone.Mobile.Analog import dial # 绝对导入
from .Analog import dial # 相对导入
from ..Fax import G3.dial # 相对导入
参考资料: