python知识整合(模块)

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)
0%