【自用】python笔记07_python中的模块

发布时间:2026/10/28 10:26:44
【自用】python笔记07_python中的模块 1. python中的模块在前面的几个章节中我们基本上是用 python 解释器来编程如果你从 Python 解释器退出再进入那么你定义的所有的方法和变量就都消失了。为此 Python 提供了一个办法把这些定义存放在文件中为一些脚本或者交互式的解释器实例使用这个文件被称为模块。1.1 什么是模块什么是模块模块就是一个.py文件Python 中的模块Module是一个包含 Python 定义和语句的文件文件名就是模块名加上 .py 后缀。模块可以包含函数、类、变量以及可执行的代码。通过模块我们可以将代码组织成可重用的单元便于管理和维护。一个.py文件就是一个模块。模块里可以放函数、类、变量相当于一个 “工具包”别人导入就能用里面的工具。模块分三类内置模块Python 自带的直接用比如random、math、os第三方模块别人写好的需要pip install安装比如requests、pandas自定义模块自己写的.py文件内置模块Python 自带直接用math、os、sys、random、time、json第三方模块需要pip install安装requests、numpy、pandas、flask自定义模块自己写的.py文件my_utils.py、tools.py包Package含__init__.py的目录里面放多个模块mypackage/1.2 模块的作用可以认为一个模块就是一个工具包每一个工具包中都有各种不同的工具供我们使用进而实现各种不同的功能。代码复用将常用的功能封装到模块中可以在多个程序中重复使用。命名空间管理模块可以避免命名冲突不同模块中的同名函数或变量不会互相干扰。代码组织将代码按功能划分到不同的模块中使程序结构更清晰。下面是一个使用 python 标准库中模块的例子。#!/usr/bin/python3 # 文件名:using_sys.pyimportsysprint(命令行参数如下:)foriinsys.argv:print(i)print(\n\nPython 路径为,sys.path,\n)执行结果如下所示$ python using_sys.py 参数1 参数2命令行参数如下:using_sys.py参数1参数2Python 路径为 [‘/root’, ‘/usr/lib/python3.4’, ‘/usr/lib/python3.4/plat-x86_64-linux-gnu’, ‘/usr/lib/python3.4/lib-dynload’, ‘/usr/local/lib/python3.4/dist-packages’, ‘/usr/lib/python3/dist-packages’]1、import sys 引入 python 标准库中的 sys.py 模块这是引入某一模块的方法。2、sys.argv 是一个包含命令行参数的列表。3、sys.path 包含了一个 Python 解释器自动查找所需模块的路径的列表。2. 内置模块2.1 查看内置模块查看python的内置模块print(help(modules))![[Pasted image 20261026144502.png]]2.2 导入方式2.2.1 import 语句想使用 Python 源文件只需在另一个源文件里执行 import 语句语法如下import module1[, module2[,... moduleN]当解释器遇到 import 语句如果模块在当前的搜索路径就会被导入。搜索路径时一个解释器会先进行搜索的所有目录的列表。需要把命令放在脚本的顶端# import方式import模块名[as别名]importpathlibimportrandomprint(random.randint(1,10))# 模块名.函数名一个模块只会被导入一次不管你执行了多少次 import。这样可以防止导入模块被一遍又一遍地执行。当我们使用 import 语句的时候Python 解释器是怎样找到对应的文件的呢这就涉及到 Python 的搜索路径搜索路径是由一系列目录名组成的Python 解释器就依次从这些目录中去寻找所引入的模块。2.2.2模块的搜索路径当导入一个模块时Python 会按照以下顺序查找模块当前目录。环境变量PYTHONPATH指定的目录。Python 标准库目录。.pth文件中指定的目录。搜索路径是在 Python 编译或安装的时候确定的安装新的库应该也会修改。搜索路径被存储在 sys 模块中的 path 变量做一个简单的实验在交互式解释器中输入以下代码sys.path 输出是一个列表其中第一项是空串 ‘’代表当前目录若是从一个脚本中打印出来的话可以更清楚地看出是哪个目录亦即我们执行 python 解释器的目录对于脚本的话就是运行的脚本所在的目录。因此若像我一样在当前目录下存在与要引入模块同名的文件就会把要引入的模块屏蔽掉。了解了搜索路径的概念就可以在脚本中修改sys.path来引入一些不在搜索路径中的模块。现在在解释器的当前目录或者sys.path中的一个目录里面来创建一个 fibo.py 的文件代码如下# 斐波那契(fibonacci)数列模块deffib(n):# 定义到 n 的斐波那契数列a,b0,1whilebn:print(b,end )a,bb,abprint()deffib2(n):# 返回到 n 的斐波那契数列result[]a,b0,1whilebn:result.append(b)a,bb,abreturnresult然后进入Python解释器使用下面的命令导入这个模块import fibo这样做并没有把直接定义在fibo中的函数名称写入到当前符号表里只是把模块fibo的名字写到了那里。可以使用模块名称来访问函数![[Pasted image 20261026145818.png]]如果你打算经常使用一个函数你可以把它赋给一个本地的名称![[Pasted image 20261026145929.png]]2.2.3 from…import 语句Python 的 from 语句让你从模块中导入一个指定的部分到当前命名空间中语法如下frommodnameimportname1[,name2[,...nameN]]例如要导入模块 fibo 的 fib 函数使用如下语句from fibo import fib, fib2 fib(500) #输出 1 1 2 3 5 8 13 21 34 55 89 144 233 377这个声明不会把整个fibo模块导入到当前的命名空间中它只会将fibo里的fib函数引入进来。给模块起别名使用 as 关键字为模块或函数起别名importnumpyasnp# 将 numpy 模块别名设置为 npfrommathimportsqrtassquare_root# 将 sqrt 函数别名设置为 square_rootfrom … import * 语句把一个模块的所有内容全都导入到当前的命名空间也是可行的只需使用如下声明frommodnameimport*这提供了一个简单的方法来导入一个模块中的所有项目。不推荐容易引起命名冲突。2.3 random 内置随机模块random模块Python中一个具有多种随机功能的内置模块。random模块: python一个具有多种随机功能的内置的python文件​使用步骤1.导包: import random2.调用功能: random.函数名(参数)常用功能方法说明示例random.randint(a, b)返回[a, b]范围内的随机整数randint(1, 10)random.choice(seq)从序列中随机选择一个元素choice(abc)示例# import方式导入模块importrandom# 使用random生成一个随机数print(random.randint(1,5))# import起别名方式importrandomasrprint(r.randint(1,5))print(----------------------------------)# from方式导入模块中指定功能fromrandomimportrandint# 使用random生成一个随机数print(randint(1,5))print(----------------------------------)# from方式模块中所有功能fromrandomimport*# 定义字符串sabc_123# 使用choice从容器abc_123中随机选择一个元素print(choice(s))小案例生成 4 位验证码importrandomimportstring charsstring.ascii_lettersstring.digits# 字母数字#进阶需求用列表推导式实现code.join([random.choice(chars)for_inrange(4)])print(code)2.4 string 模块string模块提供字符串处理相关的常量和工具。常量说明值string.ascii_letters所有ASCII字母abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZstring.digits所有数字0123456789# 演示 sting模块importstringassprint(s.ascii_letters)#abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZprint(s.digits)# 0123456789ns.ascii_letterss.digits_print(n)rand_4[random.choice(n)foriinrange(4)]end_yzm.join(rand_4)print(end_yzm)2.5 math 数学模块math模块提供数学相关的函数和常量。方法/常量说明math.pi圆周率πmath.e自然常数emath.sqrt(x)平方根math.pow(x, y)x的y次方math.log(x)自然对数math.log10(x)以10为底的对数importmathprint(math.pi)# 圆周率print(math.sqrt(16))# 开平方print(math.pow(2,3))# 2的3次方2.6 OS 模块os模块是Python标准库的一部分提供了丰富的功能来与操作系统进行交互包括文件重命名、删除获取当前工作目录、创建和删除目录、检查文件或目录是否存在等。入门示例# os: 操作系统模块# 1.导包importos​常用方法函数功能os.mkdir(目录名)创建指定名称的文件夹os.getcwd()获取当前工作目录os.chdir(目录)切换工作目录os.listdir(目录)获取指定目录下的所有文件和文件夹返回列表os.rmdir(目录)删除指定名称的空文件夹代码示例# 1.导包importos ​# 2.使用# 0.手动在当前目录创建一个static目录# 1.获取当前工作目录print(os.getcwd())# 3.创建images目录和videos目录os.mkdir(images)os.mkdir(videos)# 4.获取目录下所有文件和文件夹print(os.listdir())# 5.移除videos文件夹os.rmdir(videos)2.7 标准模块Python 本身带着一些标准的模块库在 Python 库参考文档中将会介绍到就是后面的库参考文档。模块名功能描述math数学运算如平方根、三角函数等os操作系统相关功能如文件、目录操作sys系统相关的参数和函数random生成随机数datetime处理日期和时间json处理 JSON 数据re正则表达式操作collections提供额外的数据结构如 defaultdict、dequeitertools提供迭代器工具functools高阶函数工具如 reduce、lru_cache有些模块直接被构建在解析器里这些虽然不是一些语言内置的功能但是他却能很高效的使用甚至是系统级调用也没问题。这些组件会根据不同的操作系统进行不同形式的配置比如 winreg 这个模块就只会提供给 Windows 系统。应该注意到这有一个特别的模块 sys 它内置在每一个 Python 解析器中。变量 sys.ps1 和 sys.ps2 定义了主提示符和副提示符所对应的字符串: import sys sys.ps1 sys.ps2 ... sys.ps1 C C print(Runoob!) Runoob! C3. 自定义模块3.1自定义模块自己创建一个.py文件在其中定义函数、类、变量等。每个Python文件都可以作为一个模块模块的名字就是文件的名字不含.py。模块: 本质就是一个py文件,但是文件名必须符合标识符命名规则模块名符号命名规则: 由字母,数字,下划线组成,不能以数字开头,不能是关键字,严格区分大小写示例需求自定义模块实现两个功能需求1求两数相加需求2求多个数相加需求3给每个函数写上文档注释# math_utils.py自定义数学工具模块defadd(a,b): 返回两个数相加的结果。 :param a: 第一个加数可以是 int、float 等支持加法运算的对象 :param b: 第二个加数类型应与 a 兼容 :return: a 与 b 相加的结果类型取决于传入参数 returnabdefadd_many(*args):返回任意多个数相加的结果returnsum(args)# 只有直接运行本文件时才执行的测试代码if__name____main__:print(测试 add:,add(1,2))# 3print(测试 add_many:,add_many(1,2,3))# 63.2* 文档注释知识点补充文档注释作用代码写完两周后你自己都忘了某个参数到底是干嘛的所以需要写说明你写了一个函数同事要调用它。有 docstring 他看提示就够了没有的话他得逐行读你的实现概念它是放在模块、函数、类、方法第一行的三引号字符串,光标放在函数内输入回车或按快捷键会自动补全成这样defadd(a,b): :param a:参数1建议传递一个int类型的 :param b:参数2建议传递一个int类型的 :return: 返回两个数之和 returnab3.3 模块导入新建python文件调用自定义模块# main.pyimportmath_utils ​print(math_utils.add(10,20))# 30print(math_utils.add_many(1,2,3,4))# 10调用时要写模块名.函数名前缀清楚不易冲突。3.4 Δ__name__属性测试函数的时候没有注释,没有删除,别人导包的时候就会执行,如何解决?一个模块被另一个程序第一次引入时其主程序将运行。如果我们想在模块被引入时模块中的某一程序块不执行我们可以用name属性来使该程序块仅在该模块自身运行时执行。#!/usr/bin/python3# Filename: using_name.pyif__name____main__:print(程序自身在运行)else:print(我来自另一模块)运行输出如下$ python using_name.py 程序自身在运行$ python import using_name 我来自另一模块 添加main判断if__name____main__:每个 Python 文件都有一个内置变量__name__它的值取决于这个文件是怎么被使用的文件被使用的方式__name__的值直接运行python math_utils.py__main__被导入import math_utilsmath_utils模块名关键只有直接运行的那个文件__name__才是__main__。作用就是模块自己运行时能测试被导入时不干扰别的模块

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询