跳至主要內容

模块

刘春龙原创...大约 5 分钟Python教程文档

  • Python 程序由模块组成。一个模块对应 python 源文件,一般后缀名是:.py
  • 模块由语句组成。运行 Python 程序时,按照模块中语句的顺序依次执行
  • 语句是 Python 程序的构造单元,用于创建对象、变量赋值、调用函数、控制语句等

相关信息

“量变引起质变”是哲学中一个重要的理论。量变为什么会引起质变呢?本质上理解,随着数量的增加,管理方式会发生本质的变化;旧的管理方式完全不适合,必须采用新的管理方式。

  • 程序越来越复杂,语句多了,怎么管理?很自然的,我们会将实现同一个功能的语句封装到函数中,统一管理和调用,于是函数诞生了。
  • 程序更加复杂,函数和变量多了,怎么管理?同样的思路,“物以类聚”,我们将同一类型对象的“数据和行为”,也就是“变量和函数”,放到一起统一管理和调用,于是“类和对象”诞生了。
  • 程序继续复杂,函数和类更加多了,怎么办?好,我们将实现类似功能的函数和类统统放到一个模块中,于是“模块”诞生了。
  • 程序还要复杂,模块多了,怎么办? 于是,我们将实现类似功能的模块放到一起,于是“包”就诞生了。

❤️ 大家可以清晰的看到这发展的流程,核心的哲学思想就是“量变引起质变”、“物以类聚”。同样的思路,在企业管理、人的管理中思路完全一致。大家可以举一反三。

为什么需要模块化编程

模块(module)对应于 Python 源代码文件(.py 文件)。模块中可以定义变量、函数、类、普通语句。 这样,我们可以将一个 Python 程序分解成多个模块,便于后期的重复应用。

模块化编程(Modular Programming)将一个任务分解成多个模块。每个模块就像一个积木一样,便于后期的反复使用、反复搭建。

模块化编程有如下几个重要优势:

  • 便于将一个任务分解成多个模块,实现团队协同开发,完成大规模程序
  • 实现代码复用。一个模块实现后,可以被反复调用
  • 可维护性增强

模块化编程的流程

模块化编程的一般流程:

  • 设计 API,进行功能描述。
  • 编码实现 API 中描述的功能。
  • 在模块中编写测试代码,并消除全局代码。
  • 使用私有函数实现不被外部客户端调用的模块函数。

API(Application Programming Interface 应用程序编程接口)是用于描述模块中提供的函数和类的功能描述和使用方式描述。

模块化编程中,首先设计的就是模块的 API(即要实现的功能描述),然后开始编码实现 API 中描述的功能。最后,在其他模块中导入本模块进行调用。

可以通过 help(模块名)查看模块的 API。一般使用时先导入模块 然后通过 help 函数查看。

import math
help(math)
设计计算薪水模块的 API
# encoding=utf-8
"""
本模块用于计算公司员工的薪资
"""
company = "嘉美社区"

def yearSalary(monthSalary):
    """根据传入的月薪,计算出年薪"""
    pass

def daySalary(monthSalary):
    """根据传入的月薪,计算出每天的薪资"""
    pass

如上模块只有功能描述和规范,需要编码人员按照要求实现编码。

我们可以通过__doc__可以获得模块的文档字符串的内容。源代码如下:

#encoding=utf-8
import salary
​
print(salary.__doc__)  #  本模块用于计算公司员工的薪资
print(salary.yearSalary.__doc__) #  根据传入的月薪,计算出年薪

模块导入

模块化设计的好处之一就是“代码复用性高”。写好的模块可以被反复调用,重复使用。模块的导入就是“在本模块中使用其他模块”。

import 语句导入

import语句的基本语法格式如下:

import 模块名        #导入一个模块
import 模块1,模块2#导入多个模块
import 模块名  as 模块别名   #导入模块并使用新名字

`import`加载的模块分为四种类型

  • 使用 python 编写的代码.py 文件

  • 已被编译为共享库或 DLL 的 C 或 C++扩展

  • 一组模块的包

  • 使用 C 编写并链接到 python 解释器的内置模块

import math as m
print(m.sqrt(4)) #开方运算

from…import 导入

Python 中可以使用 from…import 导入模块中的成员。基本语法格式如下:from 模块名 import 成员1,成员2,…

如果希望导入一个模块中的所有成员,则可以采用如下方式:from 模块名 import *

警告

⚠️ 尽量避免 from 模块名 import *这种写法。它表示导入模块中所有的不是以下划线_开头的名字都导入到当前位置。 但你不知道你导入什么名字,很有可能会覆盖掉你之前已经定义的名字。而且可读性极其的差。一般生产环境中尽量避免使用,学习时没有关系。

from math import sqrt
print(sqrt(4))  #开方运算
  • 我们自定义一个模块calculator.py
"""一个实现四则运算的计算器"""


def add(a, b):
    return a + b


def minus(a, b):
    return a - b


class MyNum:
    def print123(self):
        print(123)
  • 我们在另一个模块test.py测试
import calculator

a = calculator.add(30,40)
# add(100,200)    #不加模块名无法识别
print(a)
# from calculator import *
from calculator import add

a = add(100,200)  #无需模块名,可以直接引用里面的函数/类
print(a)
上次编辑于:
贡献者: 刘春龙
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.7