【100天精通python】Day14:python 标准模块,自定义模块

news2024/12/23 17:52:32

目录

1 python 模块

2 标准模块

2.1 常见的标准模块

2.2 标准模块的导入

3 自定义模块

3.1 创建模块

3.2 导入模块

3.2.1 使用import 语句导入模块

3.2.2 使用from... import 语句导入模块

3.2.3 导入模块的全部定义 

3.2.4 导入两个包含同名函数的模块


 

 模块与函数的关系

1 python 模块

在Python中,模块可以分为以下几种类型:

  1. 标准模块(Built-in Modules):这些是Python解释器内置的模块,无需额外安装即可使用。例如,mathrandomdatetime等模块就是标准模块。

  2. 第三方模块(Third-party Modules):这些模块是由其他开发者或组织创建并发布的,可以通过pip等包管理工具安装。第三方模块提供了丰富的功能和工具,帮助我们更轻松地开发应用程序。例如,requests用于进行网络请求,numpy用于数值计算,pandas用于数据分析等。

  3. 自定义模块(Custom Modules):这些模块是开发者自己编写的,用于封装功能和代码重用。我们可以将一组相关的函数、类或变量放在一个.py文件中,并通过import语句在其他地方重复使用这些代码。

  4. 包(Packages):包是一种特殊的模块,它是由一组相关的模块和子包组成的目录结构。包允许我们组织代码,使得项目更加模块化和结构化。包含__init__.py文件的目录被视为一个包。我们可以通过点号语法从包中导入模块和子包。

总结:Python中的模块类型包括标准模块、第三方模块、自定义模块和包。这些模块使得Python具有丰富的功能和灵活性,能够满足不同类型的应用程序开发需求。

        模块是一个包含Python代码的文件。模块可以包含函数、变量和类等定义,以及执行代码的语句。它们用于将代码组织成可重用的单元,使代码更加模块化和易于维护。

        Python中的每个文件都可以被视为一个模块,文件名即为模块名,不过需要注意的是,文件名不能以数字开头,并且不能包含特殊字符如空格等。模块的后缀通常是.py

        模块可以通过import语句导入到其他Python程序中使用。导入模块后,可以使用模块中定义的函数、变量和类等内容。

下面是一个简单的示例:

假设我们有一个名为mymodule.py的模块文件,其中包含以下代码:

# mymodule.py

def say_hello():
    print("Hello, I am from mymodule!")

name = "John"

现在,我们可以在另一个Python文件中导入并使用这个模块:

# main.py

import mymodule

mymodule.say_hello()
print("Name:", mymodule.name)

当我们运行main.py,输出将是:

Hello, I am from mymodule!
Name: John

在这个例子中,我们首先使用import mymodule语句导入了mymodule模块。然后,我们调用了mymodule.say_hello()函数和访问了mymodule.name变量。这样,我们就可以在main.py中重复使用mymodule.py中定义的代码,实现了模块化的编程。

2 标准模块

        在Python中,标准模块是指Python语言自带的、不需要额外安装就可以直接使用的模块。这些模块包含了各种功能,可以在不同的应用场景下使用。

        这些模块提供了各种功能,包括文件I/O、网络通信、日期和时间处理、数学运算、数据结构、正则表达式、多线程、数据库连接等等。标准库是Python开发者常用的工具集,因为它们已经内置在Python中,无需额外安装,可以直接在Python程序中使用。

2.1 常见的标准模块

        以下是Python中一些常用的标准库模块:

  1. os:提供与操作系统交互的功能,比如文件和目录操作。

  2. sys:提供与Python解释器交互的功能,比如命令行参数、模块导入等。

  3. math:提供数学运算相关的函数和常量。

  4. datetime:处理日期和时间的模块。

  5. random:生成随机数的模块。

  6. re:提供正则表达式的功能,用于字符串匹配和替换。

  7. json:用于JSON数据的编码和解码。

  8. urllib:用于发送HTTP请求和处理URL。

  9. socket:用于网络编程,实现套接字通信。

  10. sqlite3:用于连接和操作SQLite数据库。

  11. csv:用于读写CSV文件。

  12. multiprocessing:用于实现多进程编程。

这只是标准库中的一小部分,Python还有许多其他有用的标准库模块,可以根据具体需求进行查阅和使用。要使用标准库中的模块,只需使用import语句导入相应的模块即可,例如:import os。然后就可以通过os来调用其中的函数和变量,例如:os.listdir()

2.2 标准模块的导入

        在Python中,标准模块是指随着Python解释器一起安装的模块,无需额外安装即可使用。这些模块包含了Python的核心功能和许多常用的工具和库。要导入Python标准模块,只需使用import语句后跟模块的名称。

以下是一些常用的Python标准模块的导入示例:

# 导入数学相关的标准模块
import math

# 使用数学模块中的函数
print(math.sqrt(25))  # 输出:5.0

# 导入日期和时间相关的标准模块
import datetime

# 获取当前日期和时间
current_time = datetime.datetime.now()
print(current_time)  # 输出:2023-07-11 15:30:00.123456

# 导入随机数生成的标准模块
import random

# 生成一个随机整数
random_number = random.randint(1, 100)
print(random_number)

# 导入操作系统相关的标准模块
import os

# 获取当前工作目录
current_directory = os.getcwd()
print(current_directory)

# 导入正则表达式相关的标准模块
import re

# 使用正则表达式匹配字符串
pattern = r'\d+'
text = 'The price is $50'
match = re.search(pattern, text)
print(match.group())  # 输出:50

通过导入标准模块,我们可以轻松地访问和使用其中提供的功能和工具。这些模块在Python的安装中已经包含,因此无需另外安装即可使用。在编写Python程序时,标准模块是非常有用且常用的工具。

3 自定义模块

        自定义模块是指在Python中创建自己的模块,以便在不同的程序中重复使用代码。通过将相关函数、类或变量封装在一个模块中,可以提高代码的可维护性和重用性。        

要创建自定义模块,可以按照以下步骤进行

  1. 创建一个Python文件,并在文件中编写相关的函数、类或变量。

  2. 在需要使用该模块的程序中,使用import语句导入自定义模块。

  3. 调用模块中定义的函数、类或变量,以实现代码的功能。

下面是一个简单的例子来演示如何创建和使用自定义模块:

3.1 创建模块

假设我们创建一个名为math_operations.py的自定义模块,其中包含一些数学运算函数:

# math_operations.py

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

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

def multiply(a, b):
    return a * b

def divide(a, b):
    if b != 0:
        return a / b
    else:
        raise ValueError("Cannot divide by zero.")

 现在,我们可以在另一个Python文件中使用这个自定义模块:

3.2 导入模块

3.2.1 使用import 语句导入模块

# main.py

# 导入自定义模块
import math_operations

# 使用模块中的函数
result = math_operations.add(5, 3)
print("5 + 3 =", result)

result = math_operations.subtract(10, 4)
print("10 - 4 =", result)

result = math_operations.multiply(2, 6)
print("2 * 6 =", result)

result = math_operations.divide(10, 2)
print("10 / 2 =", result)

 执行main.py,将会输出:

5 + 3 = 8
10 - 4 = 6
2 * 6 = 12
10 / 2 = 5.0

这样,我们就成功地在Python程序中使用了自定义模块math_operations.py中定义的函数。自定义模块可以在多个程序中共享和重复使用,使得代码更加整洁和易于维护。

3.2.2 使用from... import 语句导入模块

使用from ... import语句是Python中导入模块的一种方式。它允许直接从模块中导入指定的函数、类或变量,而不需要在使用时添加模块名作为前缀。

语法格式为:

from module_name import name1, name2, ...

下面以前面提到的math_operations.py为例,演示如何使用from ... import语句导入模块中的函数:

# 导入模块中的特定函数
from math_operations import add, subtract

result = add(5, 3)
print("5 + 3 =", result)

result = subtract(10, 4)
print("10 - 4 =", result)

执行上述代码,将会输出:

5 + 3 = 8
10 - 4 = 6

在此例中,我们只导入了math_operations.py模块中的addsubtract函数,因此在使用时无需添加模块名作为前缀。可以根据需要选择导入模块中的特定函数、类或变量,以提高代码的可读性和简洁性。

3.2.3 导入模块的全部定义 

如果希望导入一个模块的全部定义(函数、类、变量等),可以使用

from ... import *

这将导入模块中的所有定义,使得你在使用时无需添加模块名作为前缀。

然而,尽管使用import *可以方便地使用模块中的所有定义,但它并不是一个推荐的做法。这是因为这样可能会导致命名冲突和代码可读性降低,特别是当你导入多个模块时。

例如,假设你有一个名为math_operations_sample.py的模块,其中定义了一个函数add和一个变量PI

# math_operations_sample.py

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

PI = 3.1415926

 若你使用from math_operations_sample import *来导入该模块:

from math_operations_sample import *

result = add(5, 3)
print("5 + 3 =", result)

print("PI =", PI)

执行上述代码,会输出: 

5 + 3 = 8
PI = 3.1415926

虽然使用from ... import *能够直接使用模块中的所有定义,但这样的做法会造成潜在的问题。例如,如果你在另一个模块中math_operations也定义了一个名为add的函数,那么导入的math_operations_sample模块中的add函数将会覆盖掉原有定义,导致代码行为不可预测。

因此,为了避免潜在的命名冲突,推荐的做法是使用import module_name来导入模块,并在使用时使用模块名作为前缀来访问模块中的定义。如:

import math_operations

result = math_operations.add(5, 3)
print("5 + 3 =", result)

print("PI =", math_operations.PI)

3.2.4 导入两个包含同名函数的模块

        当你导入两个包含同名函数的模块时,为了避免命名冲突,可以使用不同的别名来区分它们。Python提供了as关键字,允许你给导入的模块或函数指定别名。

假设有两个模块,分别是module1.pymodule2.py,它们都定义了一个名为add的函数:

# module1.py

def add(a, b):
    return a + b
# module2.py

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

 现在,你可以通过给导入的模块指定别名来导入它们:

import module1 as m1
import module2 as m2

result1 = m1.add(5, 3)
print("Module 1: 5 + 3 =", result1)

result2 = m2.add(5, 3)
print("Module 2: 5 * 3 =", result2)

执行上述代码,会输出

Module 1: 5 + 3 = 8
Module 2: 5 * 3 = 15

通过给导入的模块指定别名,你可以清晰地区分它们,避免了命名冲突,使得代码更加可读和易于维护。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/784446.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Docker】Docker持续集成与持续部署(四)

前言: Docker与持续集成/持续部署(CI/CD)的作用是通过容器化技术实现环境一致性、快速构建和隔离性,从而加快软件交付速度、提高部署效率,确保持续集成和持续部署的顺利实施。 持续集成(Continuous Integra…

chrome解决http自动跳转https问题

1.地址栏输入: chrome://net-internals/#hsts 2.找到底部Delete domain security policies一栏,输入想处理的域名,点击delete。 3.再次访问http域名不再自动跳转https了。

1.项目需求-项目实现

1.项目需求-项目实现代码是依次迭代的 慢慢增加。 密码只能输入整数,密码一般用字符串,用户名和密码都用字符串实现 需要头文件 不识别内容 string需要头文件。c头文件里没有.h #include string 是c特有的类型。 总结:string 是c特有的类型…

【冷冻电镜】InSilicoTEM 使用手册

简介 InSilicoTEM是一个用来模拟生成冷冻电镜显微图像的软件,原论文是"Image formation modeling in cryo-electron microscopy"。 该软件基DIPImage和MATLAB开发。 (注:在GitHub上的代码,只适用于DIPImage2.9以及更早…

C# 父类实现的 IEquatable<T> 接口,重写的相等性判断函数都能被子类继承

实验代码 Son s1 new(), s2 new();Console.WriteLine("_ s1 s2"); _ s1 s2; Console.WriteLine();Console.WriteLine("_ s1 ! s2;"); _ s1 ! s2; Console.WriteLine();Console.WriteLine("_ s1.Equals(s2);"); _ s1.Equals(s2); Cons…

华为数通HCIP-BGP基础

AS(自治系统/路由域) 定义:运行相同路由协议,具有相同管理规则的区域(一般为一个企业网); 按照传递路由时是否携带掩码分类: 1、有类路由协议 路由传递时,无需携带掩…

linux下的tomcat

springboot项目端口是8080,部署到linux运行之后,为什么能检测到tomcat 手动安装tomcat,以下是在 Linux 系统上安装 Tomcat 的步骤: 下载 Tomcat 安装包。您可以从 Tomcat 官方网站(https://tomcat.apache.org/ ↗&…

Bagging方法6大面试热点问题

Q1:为什么Bagging算法的效果比单个评估器更好? 该问题其实是在考察Bagging方法降低模型泛化误差的基本原理。 泛化误差是模型在未知数据集上的误差,更低的泛化误差是所有机器学习/深度学习建模的根本目标。在机器学习当中,泛化误差…

python获取图片坐标系中的图形,将其展示到新的坐标系中,并存储到excel中

python获取图片坐标系中的图形,将其展示到新的坐标系中,并存储到excel中 1.原始图片 2.重新定义转换的图片 3.代码展示 import cv2 import numpy as np import matplotlib.pyplot as plt import pandas as pddef get_curve_vertices(lines):vertices…

【文末送书】Python高并发编程:探索异步IO和多线程并发

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。搜…

RISC-V汇编指令

写在最前面:这一篇是UC Berkeley的CS61C的笔记,根据我自己的理解进行学习记录,其中贴的一些图片来自于课程PPT。 了解汇编之前,我们需要先了解为什么需要汇编?以下是我的理解: 机器执行的命令都是些二进制…

六边形架构和分层架构的区别?

六边形架构和分层架构是什么? 六边形架构(Hexagonal Architecture)和分层架构(Layered Architecture)是两种常见的软件架构模式。六边形架构强调将核心业务逻辑与外部依赖解耦,通过接口与外部世界进行通信。…

hcip mgre与rip实验

要求: 1.toop搭建 2.IP地址规划 R1g 0/0/1 192.168.1.1 24 s 4/0/0 188.0.0.2 24 t:10.0.0.1 24R2 s 4/0/0 188.0.0.1 24 s 4/0/1 188.0.1.1 24 s 3/0/0 188.0.2.1 24 loop0 8.8.8.8 24 t:10.0.0.2 24 R3g…

本地 IDC 中的 K8s 集群如何以 Serverless 方式使用云上计算资源

作者:庄宇 在前一篇文章《应对突发流量,如何快速为自建 K8s 添加云上弹性能力》中,我们介绍了如何为 IDC 中 K8s 集群添加云上节点,应对业务流量的增长,通过多级弹性调度,灵活使用云上资源,并通…

Python自动化测试框架pytest的详解安装与运行

这篇文章主要为大家介绍了Python自动化测试框架pytest的简介以及安装与运行,有需要的朋友可以借鉴参考下希望能够有所帮助,祝大家多多进步 1. pytest的介绍 pytest是一个非常成熟的全功能的python测试工具,它主要有以下特征: 简…

二进制子集题解

样例输入: 13样例输入: 0 1 4 5 8 9 12 13思路分析: 这道题大体就是进制转换然后按位 d f s dfs dfs。进制转换比较好理解,不懂得可以自行 b d f s ( 百度优先搜索 ) bdfs(百度优先搜索) bdfs(百度优先搜索)一下。 代码&#…

【LeetCode】260.只出现一次的数字 III(找出单身狗)

👀樊梓慕:个人主页 🎥个人专栏:《C语言》《数据结构》《蓝桥杯试题》 🌝每一个不曾起舞的日子,都是对生命的辜负。 目录 前言: 一只单身狗: 两只单身狗: 前言&#x…

HTTPS安全套接字层超文本传输协议

HTTPS安全套接字层超文本传输协议 HTTPS简介HTTPS和HTTP的主要区别客户端在使用HTTPS方式与Web服务器通信时的步骤SSL/TLS协议的加密(握手)过程为什么数据传输阶段使用对称加密HTTPS 的优点HTTPS 的缺点HTTPS 的优化证书优化会话复用 HTTPS简介 HTTP协议…

Keil系列教程07_Configuration(一)

1写在前面 本文带来的内容为“Configuration”,即配置。而这里的“配置”和前面“工程目标选项配置”是完全不同的两种配置。 工程目标选项配置是针对工程目标,保存在工程文件(.uvprojx和.uvoptx)。这里的Configuration是针对IDE…

在本地git仓库查看远端的URL

右键调出选项栏 选择git-远端,选择远端的内容就可以看到URL了