模块

1444-高同学

发表文章数:12

首页 » Python » 正文

一. 模块化程序设计理念

  1. 与函数类似,模块分为标准库模块和用户自定义模块
  2. 模块化编程的优势:
    a. 将一个任务分解成多个模块
    b. 实现代码复用
    c. 可维护性增强
  3. 模块化编程的流程:
    a. 设计API,进行功能描述
    b. 编码实现API功能
    c. 模块中编写测试代码,消除全局代码
    d. 使用私有函数实现不被外部客户端调用的模块函数

二. 模块的创建和测试代码

  1. 可以通过.__doc__获得模块的文档字符串内容
import salary

print(salary.__doc__)   #只输出第一个字符串
print(salary.yearsalary.__doc__)
  1. 每一个模块都有名称,通过特殊变量__name__可以获得模块名称(特殊情况:当模块作为程序入口时,name__值是__main
import salary

print(salary.__doc__)   #只输出第一个字符串
print(salary.yearsalary.__doc__)
print(__name__)  #__main__
print(salary.__name__)  #salary

三. 模块的导入

  1. 一个模块无论导入几次都声称同一对象(id相同)
#from math import *
'''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)   #不用加calculator前缀
print(a)
b=MyNum()
b.print123()

  1. import语句的本质是调用内置函数__import__(),通过它实现动态导入,但不建议用此方法,改为通过importlib模块实现
s="math"
m=__import__(s)
print(m.pi)

v=__import__("math")   #用字符串
print(type(v)) #<class 'module'>


import importlib
a=importlib.import_module("math")
print(a.pi)
  1. 模块的加载问题:无论模块导入多少次,整个模块在解释器进程中有且只有一个实例对象(import-only-once);若要实现重新加载,可以使用importlib.reload()方法
import test2  #执行test2模块中语句
import test2   #不重复执行test2模块中语句

'''若要重新加载'''
import importlib
importlib.reload(test2)  #执行test2中语句

四. package的使用

  1. 一个项目中有多个模块时,需要进行组织,将类似的模块放在一起,形成包
  2. 包(package)和文件夹(directory)的区别是:包有__init__.py的文件
  3. 包中可以有多个模块和子包
  4. 导入包操作本质是导入包中文__init__.py文件,因此可以在此文件中批量导入需要的包
  5. init.py的的作用:
    a. 作为包的标识,不能删除
    b. 实现模糊导入(all)
    c. 可以对包进行初始化,以及批量导入
# import a.aa.module_AA
# a.aa.module_AA.fun_AA()

# from a.aa import module_AA
# module_AA.fun_AA()

# from a.aa.module_AA import fun_AA
# fun_AA()

# import a   #执行a包中的__init__.py文件
# print(a.math.pi)  #不能直接用math,而用a.math
# import math
# print(id(a.math))
# print(id(math))  #地址相同,同一模块

from a import *
module_A1.fun_A1()

#a.__init__.py文件
import math
import turtle
print("导入a包")

__all__=["module_A1"] #只能定义包中可以被导入的模块,不包括子包(模糊导入)

未经允许不得转载:作者:1444-高同学, 转载或复制请以 超链接形式 并注明出处 拜师资源博客
原文地址:《模块》 发布于2020-12-02

分享到:
赞(1) 打赏

评论 抢沙发

评论前必须登录!

  注册



长按图片转发给朋友

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

Vieu3.3主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录