Python教程(17)——python模块是什么?python模块详解

Python模块简介

模块是一个包含了Python定义和语句的文件,可用于将功能组织成可重用和可维护的代码块。每个Python文件都可以作为一个模块,模块可以包含变量、函数、类或可执行代码。通过使用模块,我们可以将代码分离成逻辑单元,促进模块化编程。所以我们可以简单的理解为,一个py文件就是一个模块,大部分情况都是这样的。
在这里插入图片描述

使用Python模块

在Python中,要想使用Python模块,我们必须要将模块导入,这里可以使用import关键字。

导入整个模块

import module_name

这种方式会导入整个模块,你可以使用module_name来访问其中的函数、变量和类。例如,要导入math模块:

import mathresult = math.sqrt(16)
print(result)  # 输出:4.0

导入特定对象

from module_name import object_name

这种方式会导入指定的函数、变量或类,你可以直接使用该对象而不需要加上模块名。例如,要仅导入math模块中的sqrt函数:

from math import sqrtresult = sqrt(16)
print(result)  # 输出:4.0

使用别名导入

import module_name as alias_name

这种方式可以给导入的模块指定一个别名,方便使用。例如,要将datetime模块导入并命名为dt:

import datetime as dtnow = dt.datetime.now()
print(now)  # 输出当前的日期和时间

此外,还可以使用from module_name import *的形式导入模块中的所有对象。但是不推荐这种方式,因为它会导入模块中的所有对象,可能造成命名冲突或意外的行为。最好的做法是显式导入需要使用的对象。

寻找路径的顺序

需要注意的是,Python会按照一定的搜索路径来查找模块,其中包括当前目录、Python标准库的安装目录以及其他已添加的路径。如果要导入自定义的模块或第三方模块,需要将其所在的路径添加到系统的搜索路径中。
比如当前目录中有个math.py文件,自己的文件是main.py

my_project/
├── main.py
└── math.py

math.py的文件内容

print("this is math module")

main.py的文件内容

import math
# 使用math模块中的函数和常量
result = math.sqrt(25)
print(result)  

按正常来说,这个应该输出5的,当时如果你运行main.py会发现,发生了异常。

# python main.py 
this is math module
Traceback (most recent call last):File "/root/main.py", line 4, in <module>result = math.sqrt(25)
AttributeError: module 'math' has no attribute 'sqrt'

这是因为导入模块的时候,最先是在当前目录下查找,如果找到了,就直接用当前目录的模块,上面main.py中导入了math模块,而当前目录下刚好有一个math.py,所以就被导入了,但是这个文件中又没有sqrt方法,所以就报错了。所以在导入模块的时候一定要注意这种情况。

__all__特殊用法

前面我们说到了,from module_name import *的形式会导入模块中的所有对象,但是通过加入__all__变量的方式可以方便的选择导入的对象。

__all__是一个特殊的变量,用于定义模块的公共接口。在Python中,可以在模块中定义__all__变量,并将其设置为一个包含模块中所有公共对象名称的列表。这样当使用from module import *语句导入模块时,只有__all__列表中列出的对象才会被导入,而其他未列出的对象将不会被导入。

# mymodule.py__all__ = ['func1', 'func2']def func1():passdef func2():passdef _private_func():pass

mymodule.py模块定义了两个公共函数func1()func2()以及一个私有函数_private_func()。通过将__all__设置为只包含func1()func2()的列表,只能从该模块中导入这两个函数,而不能导入其他函数或变量。

使用示例:

from mymodule import *print(func1())  # 输出:<function func1 at 0x7f8c6d3a4b50>
print(func2())  # 输出:<function func2 at 0x7f8c6d3a4b90>
print(_private_func)  # 报错:NameError: name '_private_func' is not defined

我们使用from mymodule import *语句导入了mymodule模块中的所有公共对象。可以看到,只有func1()func2()被成功导入,而私有函数_private_func()没有被导入。如果尝试访问未导入的私有函数,将会引发NameError异常。

导入第三方模块

所谓第三方模块就是非python标准库的包,使用的时候需要通过pip的方式来安装,安装完之后使用方法和上面的完全一样。

更多精彩内容,请关注同名公众:一点sir(alittle-sir)

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python中NumPy详解

文章目录 NumPyNumPy介绍导入NumPyNumPy数组序列生成数组函数生成数组range&#xff0c;arange&#xff0c;linspace 其他常用函数 N维数组的属性NumPy数组的运算向量运算算数运算逐元素运算、点乘运算 操作数组元素索引访问数组切片访问数组转置与展平 NumPy的广播NumPy的高级…

在Excel中,如何简单快速地删除重复项,这里提供详细步骤

当你在Microsoft Excel中使用电子表格时&#xff0c;意外地复制了行&#xff0c;或者如果你正在制作其他几个电子表格的合成电子表格&#xff0c;你将遇到需要删除的重复行。这可能是一项非常无脑、重复、耗时的任务&#xff0c;但有几个技巧可以让它变得更简单。 删除重复项 …

零基础快速上手HarmonyOS ArkTS开发2---ArkTS开发实践

ArkTS开发实践&#xff1a; 接着上一次零基础快速上手HarmonyOS ArkTS开发1---运行Hello World、ArkTS开发语言介绍继续&#xff0c; 在上一次对于ArkTS的基础知识进行了学习&#xff0c;依照官方的课程计划&#xff0c;还有两个具体的小案例需要来实践实践&#xff1a; 实践出…

如何更好地理解和掌握 KMP 算法?

KMP算法是一种字符串匹配算法&#xff0c;可以在 O(nm) 的时间复杂度内实现两个字符串的匹配。本文将引导您学习KMP算法&#xff0c;阅读大约需要30分钟。 1、字符串匹配问题 所谓字符串匹配&#xff0c;是这样一种问题&#xff1a;“字符串 P 是否为字符串 S 的子串&#xf…

ubuntu下docker安装,配置python运行环境

参考自: 1.最详细ubuntu安装docker教程 2.使用docker搭建python环境 首先假设已经安装了docker&#xff0c;卸载原来的docker 在命令行中运行&#xff1a; sudo apt-get updatesudo apt-get remove docker docker-engine docker.io containerd runc 安装docker依赖 apt-get…

什么是 Dubbo?它有哪些核心功能?

文章目录 什么是 Dubbo&#xff1f;它有哪些核心功能&#xff1f; 什么是 Dubbo&#xff1f;它有哪些核心功能&#xff1f; Dubbo 是一款高性能、轻量级的开源 RPC 框架。由 10 层模式构成&#xff0c;整个分层依赖由上至下。 通过这张图我们也可以将 Dubbo 理解为三层模式&…

Studio One正版多少钱 Studio One正版怎么购买

随着版权意识的增强&#xff0c;打击盗版的力度越来越大&#xff0c;现在网络上的盗版资源越来越少&#xff0c;资源少很难找是一方面&#xff0c;另一方面使用盗版软件不仅很多功能不能使用&#xff0c;而且很多盗版软件都被植入各种木马病毒&#xff0c;从而带来各种各样的风…

《工作、消费主义和新穷人》读书笔记

总结 全书前半段描写的是工作伦理论被推行的原因 &#xff0c;后半段探讨了福利国家和资本国家对于穷人的态度&#xff0c;最后描写了全球化下工作伦理从生产型社会过度到消费型社会的概念演变&#xff0c;和大众对于新穷人态度的转变。 启示 对于我的启示在前几章是最多的&…

[MySQL binlog实战] 增量同步与数据搜索~从入门到精通

学习基础知识&#xff0c;并落实到实际场景&#xff08;增量同步数据搜索&#xff09; 对基础知识不感兴趣的&#xff0c;可以直接跳到应用场景 文章目录 binlog是什么简介产生方式文件格式statementrowmixed 怎么办开启 binlog查看 binlog其他查看相关命令运维查看 binlog设置…

FHE简介

1. 引言 加密技术已经存在了数千年&#xff0c;用于相互发送秘密信息。例如&#xff0c;凯撒密码是最早的加密技术之一&#xff0c;可以追溯到公元前60年&#xff0c;其只由字母表中的字母交换组成。 随着互联网的出现&#xff0c;人们生成的私人数据量呈指数级增长&#xff…

图像识别SLIC、Haralick texture features(自备)

SLIC 简单线性迭代聚类(SLIC ),它采用k-means聚类方法来有效地生成超像素。 SLIC超像素分割详解&#xff08;一&#xff09;&#xff08;二&#xff09;&#xff08;三&#xff09;_超像素分割 样本-CSDN博客 超像素分割 & SLIC算法 & 使用示例_slic分割算法matlab-C…

12_图的进阶

12_图的进阶 一、有向图有向图的定义及相关术语有向图API设计有向图实现 二、拓扑排序检测有向图中的环检测有向环的API设计 基于深度优先的顶点排序顶点排序API设计 拓扑排序实现 三、加权无向图加权无向图的实现 四、最小生成树最小生成树定义及相关约定最小生成树原理树的性…