模块
1.介绍
- 我们都是把程序一‘.py’为后缀的文件为单位运行。随着程序的变长,可能需要将其拆分几个文件以便维护。
- 有时候可能几个程序需要相同的功能,显然每次把相同的功能复制到不同的文件中并不利于维护,如果要修改功能,则要修改每个文件。不仅操作不便,而且容易出错。
- 为了满足以上需求,定义重复利用的代码的文件为模块。
- 模块中定义的代码能被导入到另一个模块或者主模块中。
2.模块创建
- 接下来创建一个”fibs.py“的文件
def fib(n):
a, b = 0, 1
while b < n:
print(b, end=" ")
a, b = b, a + b
print()
def fib2(n):
result = []
a, b = 0, 1
while b < n:
result.append(b)
a, b = b, a + b
return result
- 我们可以在于“fibs.py”同一个目录下使用这个模块。
import fibs
print(fibs)
<module 'fibs' from 'D:\\豪豪\\python\\python代码\\fibs.py'>
说明成功导入了模块fibs
3.__name__变量
*模块的模块名可以通过全局变量__name__获得
import fibs
print(fibs.__name__)
print(__name__)
fibs
__main__
- 在python中__name__是当前模块名,当模块被直接运行时模块名是__main__。有了这个特性可以判断当前文件是被运行还是被导入。
直接运行
import fibs
print(fibs.__name__)
print(__name__)
被作为模块导入
fibs
__main__
4.dir函数
- dir函数可以列出对象的模块标识符,标识符有函数,类和变量。
- 为dir函数提供一个模块名的时候,它会返回模块定义的名称列表
print(dir(fibs))
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'fib', 'fib2']
4.1.使用模块
- 知道模块有哪些标识符之后,就可以使用模块了。模块也是对象,所以调用模块中的内容和调用对象中的内容方法是一样的。
import fibs
fibs.fib(10)
print(fibs.fib2(5))
import fibs as f
f.fib(10)
print(f.fib2(5))
5.包、模块、代码。
1.包就是包含有一个__init__.py文件的文件夹。在PyCharm中创建一个包的时候就会自动创建一个__init__.py文件。
2.包>模块>代码
3.Python解释器对模块位置的搜索顺序
(1):首先查找当前目录
(2):其次搜索Shell变量PYTHONPATH的每个模目录
(3):最后是默认路径。
模块搜索路径存储在system模块的sys.path变量中。
6.标准库
- Python官方提供的包和模块,我们称之为标准库
6.1. sys模块(系统模块)
1.识别操作系统
import sys
print(sys.platform)
2.显示Python解释器版本信息
import sys
print(sys.version)
6.1.1.处理命令行参数
1.sys.argv 变量可以获取命令行参数,返回的是list类型的变量。会返回用户在命令行中输入的参数
import sys
print(sys.argv)
6.1.2.退出程序
- 需要中途退出程序就需要sys.exit()函数。还可以带有参数,返回给调用它的程序,0表示正常退出,其他表示异常退出。无论有没有参数都会退出,添加参数用于告诉调用的主程序为什么会中断程序的运行。
import sys
if len(sys.argv) <= 1:
print("缺少参数")
sys.exit()
for i in sys.argv:
print(i)
6.1.3.获取模块搜索路径
1.sys.path中存储了运行Python时,Python查找包的地方,也就是Python包可能所在的地方,即:模块存储路径
2.可以修改list类型的sys.path变量来增删改查Python解释器查找模块的路径。
import sys
#修改之前
for path in sys.path:
print(path)
#修改之后
sys.path.append("c:\\")
所以再添加了路径c:\之后,使用import导入模块的时候,Python解释器就会去C:\路径下查找模块。
6.1.4.查找已导入模块
1.sys.modules是一个全局字典,Python启动后就加载到内存中,当导入新的模块时,sys.modules就会自动更新,当再次导入模块时,Python就会去字典中查找,就不用再去按照模块位置的搜索顺序去搜索了,可以说是直接定位到模块所在的路径直接使用。加快了程序运行的速度。sys.modules拥有字典的一切方法。
import sys
print(sys.modules.keys())
print(sys.moudules.values())
print(sys.modules["os"])
6.2.os模块(操作系统模块)
1.获取当前文件所在目录
import os
print(__file__) #__file__是内置变量:D:/振豪的重要数据/Python/Python Project/基础部分/demo.py
print(os.path.dirname(__file__)) # 表示文件当前的位置:D:/振豪的重要数据/Python/Python Project/基础部分
2.获取当前执行程序的路径和切换当前的路径。
import os
print(os.getcwd()) #D:\振豪的重要数据\Python\Python Project\基础部分
# os.chdir("D:\\振豪的重要数据\\Python\\Python Project")
print(os.getcwd())
3.重命名文件
import os
os.rename("a.txt", "b.txt")
4.查看置顶的路径是否存在,存在返回True,不存在返回False
import os
folde = os.path.exists("C:\\windows")
print(folder)
5.判断给出的路径是否是一个文件,如果文件不存在或者是不是文件都会返回False,否则返回True。
import os
print(ops.path.isfile("C:\\windows\\system32"))
6.判断给出的路径是否是一个目录
import os
print(ops.path.isdir("C:\\windows\\system32"))
7.获取系统环境变量
什么是环境变量:简单理解就是,操作系统的一个对象,包含了应用程序所需要到的信息。当需要运行一个程序,但是没有告诉应用程序所在的完整路径,就会在当前目录下查询此程序文件,如果查不到就去系统的环境变量下查询。用户还可以自己设置环境变量以提高运行进程的效率
import os
for k,v in os.environ.items():
print(k, '=', v)
8.创建单层目录。只能创建一层目录。
os.mkdir("d:\\01kua")
9.创建多层目录
os.makedirs("d:\\00\\01\\02\\03")
10.删除单个目录和多个目录及拼接路径
os.rmdir()
os.removedirs()
os.path.join()
6.3.time模块
1.time.sleep()延迟执行时间
2.time.time()秒时间戳
3.time.localtime()将时间戳格式化为本地时间,返回struct_time对象。有一个参数用于接收时间戳,这样返回值是以提供的当前时间戳为基准计算到此时间戳为止是几年几月几日。如果不提供时间戳会默认使用当前时间戳。
4.time.strftime()接收时间元组struct_time作为参数,返回以可读字符串表示的时间。需要带上格式参数。
import time
print(time.strftime("%b %d %Y %H:%M:%S", time.gmtime()))
6.4.datetime模块
import datetime
print(datetime.datetime.now()) #用于显示当前时间
# 2022-07-03 11:07:35.701771
6.5.random模块(随机模块)
- 包含了很多和随机数有关的方法。
1.random():生成0到1之间的随机浮点数 -------[0, 1)
import random
print(random.random())
2.randint():随机输出一个1-150之间的随机整数---------[1, 150]
3.choice(seq):从给定的序列中获取一个随机元素,支持各种序列类型。
4.shuffle(可变序列):打乱序列元素中的顺序
5.randrange() : 随机取整数[)
6.sample(序列, 样本元素的数量) : 随机取样,返回结果是无序的列表类型。
6.6.json模块
- 处理json数据的模块。
1.json.loads():json转为字典(适用于语句)
2.json.dumps():字典转为json(适用于语句)
3.json.load() :json转为字典(适用于文件)
4.json.dump() :字典转为json(适用于文件)