Python基础教程(9)模块、包与Python标准库
一、Python项目的构成
· 包:包是一个特殊的文件夹,相比普通文件夹,包必须包含一个__init__.py文件,该文件通常是一个空文件,但也可以写入一些配置作为全局配置,包内所有模块都会先执行一次该文件中的内容
· 模块:包下面可以包含多个模块,每个模块都是包里的文件(通常以.py结尾),模块可以包含很多的类文件和函数
· 类:模块中有多个类,类下面就是具体的函数,通过函数来实现具体的功能
· 函数:对代码的最基本的封装
不同的包和模块之间的数据可以互相调用,实现结构化
二、Python模块的引用
1、使用import语句导入模块。
import 包名.模块名
由于import导入的只是模块,具体的变量还需要使用完整的命名空间进行引用,如下:
#在同一个包中引用不同模块的变量
cat file1.py name = "linuxe" cat file2.py import file1 print (file1.name) #在不同包中引用变量 name = "tanglu" #package1.file3中定义该变量 import package1.file3 #在package2.file4中进行引用 print (package1.file3.name) #使用as指令简化命名空间。当要引用的模块层级较深时,写全路径就比较麻烦,使用as可以起别名简化路径 import package1.module1.module1_modole2_module3 as m pritn (m.var)
2、使用from语句导入具体的模块或者变量,但建议直接引用变量到变量层级,否则就和import一样有书写命名空间的问题
from package1.var1 import name #导入package1包中var1模块的name变量 print (name) #直接引用name变量 from package1.var1 import * #可使用通配符导入模块中的所有变量,但通常不建议这样 from package1.var1 import a,b,c #可直接指定模块中的多个变量 #在被导入的模块中加入__all__语句可以指定*号导入时的生效范围 __all__ = ['a','b','c',] a = 1 b = 2 c = 3 d = 4 from package1.var1 import * #这个时候*号导入的变量不包含d
二、init.py文件的作用
该文件通常用于对包或模块做初始化操作,在导入包或模块时,该文件中的代码会被自动执行。也可以通过该文件指定哪些模块可以被导入
cat __init__.py __all__ = ['c7'] #只有c7模块会被导入 from package1 import * print (c7.a) #正常导入c7模块 print (c8.a) #不会有数据被导入
如果有大量模块需要导入一个相同的库,可以写在__init__.py文件
cat __init__.py import sys import datetime
三、Python标准库
Python自带了一个强大的标准库,内置了非常多的模块可以直接使用,由于每个模块都包含了大量的函数,这里只写了一些较为常用的作为学习。除了在网上查询模块支持的函数,还可以通过pycharm补全来获得相关信息
1、sys模块:用于获取python自身相关信息的模块
import sys print (sys.version) #Python版本 print (sys.platform) #系统平台 print (sys.argv) #运行脚本时所添加的命令行参数,有多少个参数就会打印多少个
2、os模块:用来对系统做管理的模块,通常用来操作磁盘或者目录
import os print (os.name) #获取操作系统的类型 print (os.environ['path']) #获取操作系统的环境变量,这里是获取了path这个变量 print (os.getcwd()) #获取当前目录 print (os.listdir('c:/')) #列出指定目录中的内容 os.system('ipconfig') #执行系统命令,如ipconfig
3、math模块:用于做运算的模块
4、random模块:生成随机数的模块,数据类型为整数,如果需要和input()所传递的数据做比较的话需要进行数据类型转换
print (random.randint(1,101)) #返回1-100之间的随机整数 print (random.sample([1,2,14,24,6],2)) #从数组中返回2个随机元素
5、正则文字处理模块:re
6、日期类型模块:time、datetime
import time a = (time.time())/60/60/24/365 #从1970年到现在过了多少年 print (a)
7、datetime模块:和时间设置相关的模块
print (datetime.now()) #返回当前时间
评论