一. 模块化程序设计理念
与函数类似,模块分为标准库模块和用户自定义模块 模块化编程的优势: a. 将一个任务分解成多个模块 b. 实现代码复用 c. 可维护性增强 模块化编程的流程: a. 设计API,进行功能描述 b. 编码实现API功能 c. 模块中编写测试代码,消除全局代码 d. 使用私有函数实现不被外部客户端调用的模块函数
二. 模块的创建和测试代码
可以通过.__doc__获得模块的文档字符串内容
import salary
print ( salary. __doc__)
print ( salary. yearsalary. __doc__)
每一个模块都有名称,通过特殊变量__name__可以获得模块名称(特殊情况:当模块作为程序入口时,name__值是__main )
import salary
print ( salary. __doc__)
print ( salary. yearsalary. __doc__)
print ( __name__)
print ( salary. __name__)
三. 模块的导入
一个模块无论导入几次都声称同一对象(id相同)
'''import math中的全部内容,但有可能覆盖本身的内容
调用math中的内容可以省略math'''
from math import pi, sin
print ( sin( pi) )
import math as m
print ( m. sin( m. pi) )
import math
m= math
print ( m. sin( m. pi) )
import calculator
a= calculator. add( 3 , 4 )
print ( a)
from calculator import *
a= add( 30 , 40 )
print ( a)
b= MyNum( )
b. print123( )
import语句的本质是调用内置函数__import__(),通过它实现动态导入,但不建议用此方法,改为通过importlib 模块实现
s= "math"
m= __import__ ( s)
print ( m. pi)
v= __import__ ( "math" )
print ( type ( v) )
import importlib
a= importlib. import_module( "math" )
print ( a. pi)
模块的加载问题:无论模块导入多少次,整个模块在解释器进程中有且只有一个实例对象(import-only-once);若要实现重新加载,可以使用importlib.reload()方法
import test2
import test2
'''若要重新加载'''
import importlib
importlib. reload ( test2)
四. package的使用
一个项目中有多个模块时,需要进行组织,将类似的模块放在一起,形成包 包(package)和文件夹(directory)的区别是:包有__init__.py的文件 包中可以有多个模块和子包 导入包操作本质是导入包中文__init__.py文件,因此可以在此文件中批量导入需要的包 init .py的的作用: a. 作为包的标识,不能删除 b. 实现模糊导入(all ) c. 可以对包进行初始化,以及批量导入
from a import *
module_A1. fun_A1( )
import math
import turtle
print ( "导入a包" )
__all__= [ "module_A1" ]