首页 > 编程语言 >【python笔记】—— 模块

【python笔记】—— 模块

时间:2024-06-12 18:57:21浏览次数:27  
标签:语句 python py 笔记 Python 导入 模块 import

模块和包概念的进化史

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

标准库模块(standard library) 

python模块分为标准库模块和用户自定义模块。

Python标准库提供了操作系统功能、网络通信、文本处理、文件处理、数学运算等基本的功能。比如:random(随机数)、math(数学运算)、time(时间处理)、file(文件处理)、os(和操作系统交互)、sys(和解释器交互)等。

另外,Python还提供了海量的第三方模块,使用方式和标准库类似。功能覆盖了我们能想象到的所有领域,比如:科学计算、WEB开发、大数据、人工智能、图形系统等。

为什么需要模块化编程

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

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

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

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

 

模块化编程的流程

模块化编程的一般流程:

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

 

模块的API和功能描述要点

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

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

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

导入math模块,并通过help()查看math模块的API:

import math
help(math)

模块的导入

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

import语句导入

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

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

from…import导入

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

from 模块名 import 成员1,成员2,…

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

from 模块名 import *

import语句和from...import语句的区别

import导入的是模块。from...import导入的是模块中的函数/类。

我们自定义一个模块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)

模块的加载问题

当导入一个模块时, 模块中的代码都会被执行。不过,如果再次导入这个模块,则不会再次执行。

一个模块无论导入多少次,这个模块在整个解释器进程内有且仅有一个实例对象。

test02.py的源代码:

print("test模块被加载了...")

test03.py的源代码:

import test02  #会执行test02模块中的语句
import test02  #不会再执行test02模块中的语句

重新加载

有时候我们确实需要重新加载一个模块,这时候可以使用:importlib.reload()方法:

import test02
import test02
print("####")
import importlib
importlib.reload(test02)

包(package)的概念和结构

当一个项目中有很多个模块时,需要再进行组织。我们将功能类似的模块放到一起,形成了“包”。本质上,“包”就是一个必须有__init__.py的文件夹。典型结构如下:

包下面可以包含“模块(module)”,也可以再包含“子包(subpackage)”。就像文件夹下面可以有文件,也可以有子文件夹一样。

pycharm中创建包

在pycharm开发环境中创建包,非常简单。在要创建包的地方单击右键:New-->Python package即可。pycharm会自动帮助我们生成带有__init__.py文件的包。

*导入包

import * 这样的语句理论上是希望文件系统找出包中所有的子模块,然后导入它们。这可能会花长时间等。Python 解决方案是提供一个明确的包索引。

这个索引由 __init__.py 定义 __all__ 变量,该变量为一个列表,如上例 a包下的 __init__.py 中,可定义 __all__ = ["module_A","module_A2"]

这意味着, from sound.effects import * 会从对应的包中导入以上两个子模块;

⚠️尽管提供import *的方法,仍不建议在生产代码中使用这种写法。

标签:语句,python,py,笔记,Python,导入,模块,import
From: https://blog.csdn.net/m0_73596070/article/details/139609106

相关文章

  • Python字符串操作(1)
    -----案例1:要求-----读取用户输入的一串用逗号分隔的值,然后对其中的数字进行求和,并输出结果。-----案例1:代码示例-----myinput=input("请输入:")#提示用户输入,并将输入的内容赋值给变量myinputls=myinput.split(',')#使用逗号作为分隔符,将输入的字符串分割成......
  • 用ESP32(ESP32-CAM)(Micropython)、水位传感器、继电器、水泵 做根据水位自动加水的设
    基本流程水位传感器放在水缸内上方位置,水位到达水位传感器所在的位置时,水位传感器触发,并输出信号给到ESP32(ESP32CAM)。然后ESP32(ESP32CAM)控制继电器闭合,水泵启动并工作60S。之后还是根据传感器信号,决定继电器是闭合还是断开,一直循环下去。main.py点击查看main.pyfrom......
  • DH算法python 原理说明和演示
    importgmpy2p=17g=3x_a=15x_b=13#y_a=a_g^x_amoda_py_a=6#y_a=a_g^b_xmoda_py_b=12#a#y_s=y_b^x_amoda_p#y_s=12^15mod17#b#y_s=ya^x_bmoda_p#y_s=6^12mod17if__name__=='__main__�......
  • python-爬虫-邮箱发送
    #-*-coding:utf-8-*-#发送信息到邮箱importemail.utilsimportsmtplibfromemail.mime.textimportMIMEText#发送文本fromemail.mime.imageimportMIMEImage#发送图片fromemail.mime.multipartimportMIMEMultipartfromemail.headerimportHeader""&quo......
  • python-爬虫-获取浏览器的cookies
    1、封装浏览器对象#-*-coding:utf-8-*-"""封装类将获取浏览器的对象封装成一个类调用方法:1、importGet_Browser2、driver=Get_Browser.Get_Browsers().get_browser()"""fromseleniumimportwebdriverclassGet_Browsers:def__init__(self......
  • 朴素贝叶斯分类器 #数据挖掘 #Python
    朴素贝叶斯分类器是一种基于概率统计的简单但强大的机器学习算法。它假设特征之间是相互独立的(“朴素”),尽管在现实世界中这通常不成立,但在许多情况下这种简化假设仍能提供良好的性能。基本原理:朴素贝叶斯分类器利用贝叶斯定理,计算给定输入特征条件下属于某个类别的概率,并选择......
  • python系列:python fastapi + uvicorn 记录日志的最佳实践,结合nb_log
    pythonfastapi+uvicorn记录日志的最佳实践,结合nb_logpythonfastapi+uvicorn记录日志的最佳实践,结合nb_logpythonfastapi+uvicorn记录日志的最佳实践,结合nb_logpythonfastapi+uvicorn记录日志的最佳实践,要记录对fastapi什么时候请求了什么url和入......
  • Python中用PyTorch机器学习神经网络分类预测银行客户流失模型|附代码数据
    阅读全文:http://tecdat.cn/?p=8522最近我们被客户要求撰写关于神经网络的研究报告,包括一些图形和统计输出。分类问题属于机器学习问题的类别,其中给定一组特征,任务是预测离散值。分类问题的一些常见示例是,预测肿瘤是否为癌症,或者学生是否可能通过考试在本文中,鉴于银行客户的某些......
  • python中实例方法、类方法、静态方法
    实例方法self:代表类的实例类方法cls:代表类这个名称本身静态方法不能传递类的实例self,也不能传递类本身cls点击查看代码classMyClass:"""静态成员变量静态成员变量是被类的所有实例共享的访问方式:通过类名."""my_static_variable=0"......
  • python-爬虫-解决反爬机制-登录淘宝
    #-*-coding:utf-8-*-"""1、先手动登录获取cookie2、获取cookie保存在taobaoCookies.pickle文件中3、使用cookie去请求网页"""importosimportpickleimporttimefromseleniumimportwebdriverfromselenium.webdriver.support.waitimportWebDriverWa......