赞
踩
什么是模块?
模块是 Python 程序架构的一个核心概念
• 每一个以扩展名 py 结尾的 Python 源代码文件都是一个模块;
• 模块名同样也是一个标识符,需要符合标识符的命名规则;
• 模块就好比是工具包,要想使用这个工具包中的工具,就需要先 导入import 这个模块;
• 在模块中定义的 全局变量 、函数、类 都是提供给外界直接使用的工具。
# 文件1:module01_fibonacci_返回小于n的数列值.py
gl_num = 100
def fib(n):
"""生成值小于 n 的斐波那契数列"""
a, b = 1, 1
while a < n:
print(a, end=" ")
a, b = b, a+b
print()
def prt(n):
print("我是模块1")
print(f"1-{n}范围内的斐波那契数列为:")
# 文件2:module02_fibonacci_返回n个数.py
gl_num = 100
def fib(n):
"""生成 n 个斐波那契数列的值"""
a, b = 1, 1
for i in range(n):
print(a, end=" ")
a, b = b, a+b
print()
def prt(n):
print("我是模块2")
print(f"前{n}个斐波那契数列为:")
# 在另一个文件中导入 module01 和 module02
import module01_fibonacci_返回小于n的数列值
import module02_fibonacci_返回n个数
print(module01_fibonacci_返回小于n的数列值.gl_num) # 调用module01 中的全局变量 gl_num1
print(module02_fibonacci_返回n个数.gl_num) # 调用module02 中的全局变量 gl_num2
module01_fibonacci_返回小于n的数列值.prt(20)
module01_fibonacci_返回小于n的数列值.fib(20) # 调用module01 中的函数 fib1
print("-"*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 FibMod
print("模块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, prt
from 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 random
print(module01_fibonacci_返回小于n的数列值.__file__)
print(random.__file__)
#列举模块内容: dir (模块名)
#返回一个排好序的字符串列表,内容是模块中定义的变量和函数。
print(dir(random))
# sys 模块中的 sys.path 搜索模块路径
import sys
print(sys.path)
每一个.py文件都应该是可以被导入的
在导入文件时,文件中 所有没有任何缩进的代码 都会被执行一遍!
这就会出现测试代码本来仅在模块内使用,然而被导入到其他文件中。
如何把测试代码仅在模块内使用,不被导入到其他文件中?
_name _ 属性可以做到!!
如果 是被其他文件导入的,_ name_ 就是 模块名
如果 是当前执行的程序 _ name_ 会等于 _ main_
在很多 Python 文件中都会看到以下格式的代码:
# 导入模块
# 定义全局变量
# 定义类
# 定义函数
# 在代码的最下方
def main():
# ...
pass
# 根据 __name__ 判断是否执行下方代码
if __name__ == "__main__":
main()
import time
print(time.localtime())
print("---start---")
time.sleep(2) # 休眠2秒
print("-- end---")
提供了访问操作系统服务的功能,该模块中常用函数如下表所示。
随机数模块,该模块中定义了多个可产生各种随机数的函数。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。