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)