什么是模块?
模块是 Python 程序架构的一个核心概念
• 每一个以扩展名py 结尾的 Python 源代码文件都是一个模块;
• 模块名同样也是一个标识符,需要符合标识符的命名规则;
• 模块就好比是工具包,要想使用这个工具包中的工具,就需要先 导入import 这个模块;
• 在模块中定义的 全局变量 、函数、类 都是提供给外界直接使用的工具。
# 文件1:module01_fibonacci_返回小于n的数列值.py gl_num=100deffib(n):"""生成值小于 n 的斐波那契数列""" a, b=1,1while a< n:print(a, end=" ") a, b= b, a+bprint()defprt(n):print("我是模块1")print(f"1-{n}范围内的斐波那契数列为:")
# 文件2:module02_fibonacci_返回n个数.py gl_num=100deffib(n):"""生成 n 个斐波那契数列的值""" a, b=1,1for iinrange(n):print(a, end=" ") a, b= b, a+bprint()defprt(n):print("我是模块2")print(f"前{n}个斐波那契数列为:")
# 在另一个文件中导入 module01 和 module02import module01_fibonacci_返回小于n的数列值import module02_fibonacci_返回n个数print(module01_fibonacci_返回小于n的数列值.gl_num)# 调用module01 中的全局变量 gl_num1print(module02_fibonacci_返回n个数.gl_num)# 调用module02 中的全局变量 gl_num2 module01_fibonacci_返回小于n的数列值.prt(20) module01_fibonacci_返回小于n的数列值.fib(20)# 调用module01 中的函数 fib1print("-"*20) module02_fibonacci_返回n个数.prt(20) module02_fibonacci_返回n个数.fib(20)# 调用module02 中的函数 fib2
需要在同一级文件,在 第三个程序mo1使用 import 导入 文件1:module01_fibonacci_返回小于n的数列值.py 、文件2:module02_fibonacci_返回n个数.py 执行mo1 才会出现以下成果
cpython-37 表示 Python 解释器的版本
这个 pyc 文件是由 Python 解释器将 模块的源码 转换为字节码,.pyc表示程序已经编译过
使用 as 指定模块的别名 如果在开发过程中需要导入一些名称较长的模块,那么可使用as为这些模块起别名 import 模块名 as 别名
注意:模块别名 应该符合 大驼峰命名法(首字母大写)
import module01_fibonacci_返回小于n的数列值 as FibMod
import module01_fibonacci_返回小于n的数列值as FibModprint("模块1中的全局变量:", FibMod.gl_num) FibMod.prt(100) FibMod.fib(100)
语法:from 模块名 import 工具名 优点:导入之后,不需要 通过 模块名,可以直接使用 模块提供的工具
支持一次导入多个函数、类、变量等,函数与函数之间使用逗号隔开。
from module01_fibonacci_返回小于n的数列值import fib,prt prt(100) fib(100)'''注意: 如果 两个模块,存在 同名的函数,那么 后导入模块的函数,会 覆盖掉先导入的函数。 解决方法可以用 as 关键字 给其中一个工具起一个别名 '''from module01_fibonacci_返回小于n的数列值import fib, prtfrom module02_fibonacci_返回n个数import fib, prt# 后导入的同名函数覆盖之前导入的函数 prt(10) fib(10)
利用通配符“*”可使用from…import…导入模块中的全部内容,语法格式如下:from 模块名 import *
小结:虽然通过“from 模块名 import …”方式可简化模块中内容的引用,但可能会出现函数重名的问题。因此,相对而言使用import语句导入模块更为安全。
模块位置搜索顺序
当导入一个模块时,python解释器对模块位置的搜索顺序为:
(1)当前目录,如果有就直接导入
(2)如果没有,再搜索Python PATH环境变量下的每个目录
(3)Python 中每一个模块都有一个内置属性file 可以 查看模块 的 完整路径
(4)模块搜索路径存储在 sys 模块中的 sys.path变量中。
# 内置属性 __file__ 查看模块的完整路径import module01_fibonacci_返回小于n的数列值import randomprint(module01_fibonacci_返回小于n的数列值.__file__)print(random.__file__)#列举模块内容: dir (模块名)#返回一个排好序的字符串列表,内容是模块中定义的变量和函数。print(dir(random))# sys 模块中的 sys.path 搜索模块路径import sysprint(sys.path)
每一个.py文件都应该是可以被导入的
在导入文件时,文件中 所有没有任何缩进的代码 都会被执行一遍!
这就会出现测试代码本来仅在模块内使用,然而被导入到其他文件中。
如何把测试代码仅在模块内使用,不被导入到其他文件中?
_name _ 属性可以做到!!
如果 是被其他文件导入的,_name_ 就是模块名
如果 是当前执行的程序 _name_ 会等于 _main_
在很多 Python 文件中都会看到以下格式的代码:
# 导入模块# 定义全局变量# 定义类# 定义函数# 在代码的最下方defmain():# ...pass# 根据 __name__ 判断是否执行下方代码if __name__=="__main__": main()
time 模块
import timeprint(time.localtime())print("---start---") time.sleep(2)# 休眠2秒print("-- end---")
os模块
提供了访问操作系统服务的功能,该模块中常用函数如下表所示。
random模块
随机数模块,该模块中定义了多个可产生各种随机数的函数。
热门文章
- 4月7日免费VPN节点 | 21.3M/S|2025年SSR/Clash/Shadowrocket/V2ray免费订阅链接地址
- 3月6日免费VPN节点 | 22.1M/S|2025年V2ray/Clash/Shadowrocket/SSR免费订阅链接地址
- 猫三联加狂犬疫苗一共几针,多少钱一针(猫三联和狂犬疫苗间隔多久打一次)
- 什么样的狗粮才是好狗粮(什么样的狗粮性价比高)
- Java 使用 Maven BOM 统一管理版本号_在线工具
- 宠物领养须知图片大全大图(宠物领养须知图片大全大图高清)
- 3月19日免费VPN节点 | 18.2M/S|2025年Clash/Shadowrocket/V2ray/SSR免费订阅链接地址
- 广州市宠物领养平台(广州宠物领养微信群)
- 3月24日免费VPN节点 | 19.2M/S|2025年V2ray/SSR/Shadowrocket/Clash免费订阅链接地址
- 领养孩子协议书模板图片大全(领养孩子的协议书怎么写)