模块(module):
好处: 提高代码可维护性 + 编写代码不必从零开始
模块有三种: python标准库、第三方模块、应用程序自定义模块
另外,使用模块还可以避免函数名和变量名冲突,相同名字的函数和变量完全可以分别存在不同的模块中。因此,我们在自己编写模块时,不必考虑名字会与其他模块冲突,但是也要注意,尽量不要与内置函数名字冲突。
搜索路径:sys.path
现在有 calculate.py文件,内有 add()、sub()方法
模块导入方法:
- 导入整个模块:
import calculate,time (多个模块使用 , 分隔开)
print(calculate.add(1, 2))
2. 导入模块内的多个方法:
from calculate import add,sub
print(add(3, 2))
import calculate # 解释器通过搜索路径找到 calculate.py 后,将 calculate = calculate.py all code import sys 需要使用 calculate 来调用add方法 print(calculate.add(1, 2)) # 搜索路径 print(sys.path)
from calculate import *: # 此种情况遇到的问题是 calculate 中的 add 方法与本文件中的 add 方法有重复时,会按照顺序来决定使用哪一个。因此不建议使用此种方式
from calculate import add as plus: # 这样就不能再使用 add 方法,而是使用 plus 方法
from calculate import add, minus # 此时不能再使用 calculate 来调用add方法,他并不是一个可以直接拿到的变量了。 print(add(3, 2)) from calculate import add as plus print(plus(3, 3))
- 从包 (web) 中导入模块:
- 如果包和文件在同一级目录: from web import logger (不能 import web.logger)
- 包 web 和文件在同一目录,web下还有包 web2,web2 下有文件logger:
- 如果想导入 web.web2 下的模块 logger 导入 mylogger 方法:
- from web.web2.logger import mylogger
- 导入包: import web # 这句话执行了包 web 下的 _init_ 模块
# from web import logger # 从同级包导入模块 import web # 导入包,执行了_init_模块 print(web.main.x) #报错AttributeError: module 'web' has no attribute 'main'
包:模块使用来组织函数的,包是用来组织模块的;
包下面有 _init_ 文件
目录结构:
bin(入口):_init_.py 、 bin.py
module(主逻辑):_init_.py 、 main.py 、logger.py
conf(配置):
# 在被调用时,不会编译执行此段代码
if __name__ == “__main__”:
序列化:
json:
pickle:
shelve:
xml:
标签、属性: <country name = ‘panama’> </country>