1、自定义模块
在Python中一个.py文件就是一个模块。
在python中自定义模块有2个作用。一个是规范代码,让代码更易于阅读。另一个是方便其他程序使用已经编写好的代码,提高开发效率、
要实现自定义模块主要分为创建模块和导入模块2部分。
1.1、创建模块
就是将模块中的相关代码编写在单独的文件中,文件名为模块名.py
要注意的是设置的模块名不能与python自带的标准库名称一样。如果一样的话。先导入了我们自定义的模块后,就不能再导入python自带的标准库
1.2、使用import语句导入模块
使用import导入
语法格式
import modulename [as alias]
部分参数说明:
[as alias] 给模块起的别名,可以通过该别名使用模块
在调用模块中的变量、函数或者类等时,需要在变量、函数或者类名前面添加“模块名.”
使用import语句也可以一次导入多个模块
如
import re,requests,os
1.3、使用from…import语句导入模块
在使用import语句导入模块时,每执行一条import语句就会创建一个新的命名空间,且在调用模块中的变量、函数或者类时,需要在变量、函数或者类名前面添加“模块名.”。
使用from…import语句导入模块是把具体的定义导入到当前的命名空间,不需要添加前缀,直接通过具体的变量、函数或者类等访问即可。
语法格式:
from modelname import member
参数说明:
modelname:模块名区分大小写
member:用于指定要导入的变量、函数或者类等,可以同时导入多个定义,如果要想导入全部定义使用“*”代替。
注意:在导入模块时,如果使用了通配符*导入全部定义之后,可以使用dir()来查看具体导入了哪些定义。
1.3、模块搜索的目录
当使用import语句导入模块时,在默认的情况下,按一下顺序进行查找
1、在当前目录进行查找
2、在python环境变量下的每个目录查找
3、到python的默认安装目录下查找
说明的各个目录的具体位置都是保存在标准模块sys的sys.path变量中。可以通过一下代码输出具体的目录
import sys
print(sys.path)
如果要导入的模块不在标准模块sys的sys.path变量中,会报错。(注意模块名区分大小写)
这时有3种方式可以将指定的目录添加到sys.path中
1、临时添加
通过该方法添加的目录只在执行当前文件的窗口有效,窗口关闭后就失效。
语法格式
import sys
sys.path.append("要添加的指定目录")
2、增加.pth文件(推荐)
在python安装目录的子目录Lib\site-packages子目录中,创建一个扩展名为.pth的文件,文件名任意,在该文件中添加要导入模块所在的目录。然后重新打开要执行导入模块的python文件,使得新添加的目录生效。
通过该方法添加的目录只在当前版本的python中有效
3、在PYTHONPATH环境变量中添加
在系统的环境变量对话框中,查找在PYTHONPATH环境变量,如果没有就创一个,然后添加所要导入的模块的目录。然后重新打开要执行导入模块的python文件,使得新添加的目录生效。
通过该方法添加的目录在不同版本的python中都有效
2、以主程序的形式执行
创建一个aaa模块
p = "苹果"
def fun_c():
p = "一个烂苹果"
print(p)
if __name__=="__main__":
print("哈哈哈哈")
在text中导入该模块
import aaa
print(aaa.p)
输出
苹果
说明:如果在aaa模块中没有if语句的话,会把下面的测试语句( print(“哈哈哈哈”))也一块执行。但是我们只想要输出变量p。故将测试语句放入if语句。
3、python中的包
python中的包是一个分层的目录结构,它将一组功能相近的模块组织在一个目录下,这样就可以起到代码规范的作用,又可以避免模块重名引起的冲突
简单来说python的包就是一个含义__init__.py的文件的文件夹
3.1、创建
1、创建包就是创建一个文件夹,并在文件里创建一个名称为__init__.py的文件。在__init__.py文件里可以不编写代码,也可以编写代码,在导入包时会自动执行。
注意:init.py文件是一个模块文件,模块名为包名。在a包中创建的__init__.py文件,对应的模块名为a
3.2、使用包
创建包,然后在包中创建相应的模块,然后再使用import语句从包中加载模块。
从包中加载模块有以下3种方式。
1、通过"import+完整包名+模块名"的方式加载指定模块
语法格式
import 完整包名.模块名
通过该方式,访问模块中的变量时,语法格式如下
完整包名.模块名.变量名
2、通过"from+完整包名+import+模块名"的方式加载指定模块
语法格式:
from 完整包名 import 模块名
通过该方式,访问模块中的变量时,语法格式如下
模块名.变量名
3、通过通过"from+完整包名+import+模块名+定义名"的方式加载指定模块
语法格式
from 完整包名.模块名 import 定义名1,定义名2,....
定义名可以是函数、类、变量名等
通过该方式,访问模块中的函数、类、变量等,语法格式如下
定义名
如果使用*号则表示加载该模块下的所有定义
4、引用其他模块
在python中除了自定义模块,还有其他模块,主要包括标准模块和第三方模块。
下表为python中常用的内置的标准模块
模块名 | 概述 |
---|---|
sys | 与python解释器及其环境操作相关的标准库 |
time | 提供与时间相关的各种函数的标准库 |
os | 提供了访问操作系统服务功能的标准库 |
calendar | 提供了与日期相关的各种函数的标准库 |
urllib | 用于读取来自网上(服务器上)的数据的标准库 |
json | 用于使用JSON序列化和反序列化 |
re | 用于在字符串中执行正则表达式匹配和替换 |
math | 提供标准算术运算函数的标准库 |
decimal | 用于进行精确控制运算精度、有效位数和四舍五入操作的十进制运算 |
shutil | 用于进行高级文件操作,如复制等 |
logging | 提高了灵活的记录事件、错误、警告和调试信息等日志信息的功能 |
thinker | 使用python进行GUI编程的标准库 |
当然python有许多标准库,可以在python的安装目录下,的DOC目录下的扩展名为.chm文件(就是python的帮助文档)打开文件,文件里的The Python Standard Library下面的Python Runtime Services里进行查看,当然也可以上网查找。
5、牛刀小试
5.1、输出6位数的验证码
要求确保6位数中有一位大写字母,一位小写字母,一位数字
import random, string
code_li = []
"""确保6位数中有一位大写字母,一位小写字母,一位数字"""
code_li.append(random.choice(string.ascii_lowercase)) # 随机添加小写字母
code_li.append(random.choice(string.digits)) # 随机添加
code_li.append(random.choice(string.ascii_uppercase)) # 随机添加大写字母
while len(code_li)<6:
code_li.append(random.choice(string.ascii_lowercase+string.digits+string.ascii_uppercase))
print(code_li)
q_code = "".join(code_li)
"""
join()函数
语法: 'sep'.join(seq)
参数说明
sep:分隔符。可以为空
seq:要连接的元素序列、字符串、元组、字典
上面的语法即:以sep作为分隔符,将seq所有的元素合并成一个新的字符串
返回值:返回一个以分隔符sep连接各个元素后生成的字符串
"""
print(q_code)
5.2、转化为时间戳
把2019-01-02 20:12:54转化为时间戳
import time
dt = "2019-01-02 20:12:54"
timeArray = time.strptime(dt,"%Y-%m-%d %H:%M:%S") # 根据指定的格式把一个时间字符串解析为时间元组。(转化为时间戳)
# timestamp = time.mktime(timeArray) # 返回用秒数来表示时间的浮点数
# print(timestamp)
print(timeArray)