一、模块介绍
Python Module(模块),就是一个保存了Python代码的文件。模块能定义函数,类和变量。模块里也能包含可执行的代码。
文件名就是模块名加上后缀.py,在模块内部,模块名存储在全局变量__name__中,是一个string,可以直接在module中通过__name__引用到module name。
模块分为三种:
-
自定义模块
-
内置标准模块(又称标准库)
-
开源模块
导入模块:
-
import: 使客户端(导入者)以一个整体获取一个模块。
-
from:容许客户端从一个模块文件中获取特定的变量名。
-
reload:在不中止Python程序的情况下,提供了一个重新载入模块文件代码的方法。
语法: import module from module.xx.xx import xx from module.xx.xx import xx as rename from module.xx.xx import * #一般不推荐使用 示例: 推荐方法一: import cal #当前目录直接调用模块 from my_module import cal #二层目录调用模块 from web1,web2,web3 import cal #多层目录调用模块 推荐方法二: from web1,web2,web3.cal import add 注意:不支持的调用方式 from web1.web2 import web3 #执行__init__文件,唯一不支持的调用方式 print(web3.cal.add(2,6))
模块路径
import sys import os pre_path=os.path.abspath('.../') sys.path.append(pre_path) #添加路径,添加环境变量临时生效
for i in sys.path: #获取路径,
print(i)
注意:
环境变量:永久生效方法:我的电脑--->系统属性--->环境变量--->Path路径中添加,以";" 分割。
二、包(package)的概念
我们先设想一下,如果不同的人编写的模块名相同怎么办?为了避免冲突,Python又引进了按目录
来组织模块的方法,称为包(package)。
假设,如下图,我的两个time_file.py模块名字重名了,但是这两个模块的功能都不相同,如果这两个模块都在同一级目录中,那么我在其他地方要调用这个time_file.py模块,那么这个时候就会发生冲突,
在这里我们就可以通过包来组织模块,避免冲突。
方法是:选择一个顶层包名,引入包以后,只要顶层的包名不与别人冲突,那这个包里面的模块都不会与别人冲突了。
请注意:每个包目录下来都会有一个__init__.py的文件,这个文件必须是存在的,否则,Python就不把这个目录当成普通目录,而不是一个包,__init__.py可以是空文件,
也可以有python代码,__init__.py本身就 是一个文件,它的模块命就是对应的包名,它一般做接口文件。
三、time模块
时间相关的操作,时间有三种表示方式:
时间戳
1970
年
1
月
1
日之后的秒,即:time.time()
格式化的字符串
2016
-
12
-
12
10
:
10
, 即:time.strftime(
'%Y-%m-%d'
)
结构化时间 元组
即:time.struct_time元组共有
9
个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天,夏令时)
即:time.localtime()
import time print(time.time()) #当前时间的时间戳
#1528284151.432538
2.将一个时间戳转换为当前时区的struct_time。secs参数未提供,则以当前时间为准。
time.localtime([secs])
print(time.localtime())
print(time.localtime(1528284151.432538)) >>>>
time.struct_time(tm_year=2018, tm_mon=6, tm_mday=6, tm_hour=19, tm_min=22, tm_sec=31, tm_wday=2, tm_yday=157, tm_isdst=0)
time.struct_time(tm_year=2018, tm_mon=6, tm_mday=6, tm_hour=19, tm_min=22, tm_sec=31, tm_wday=2, tm_yday=157, tm_isdst=0)
3.gmtime([secs]) 和localtime()方法类似,
gmtime()方法是将一个时间戳转换为UTC时区(0时区)的struct_time
print(time.gmtime()) >>>>>> time.struct_time(tm_year=2018, tm_mon=6, tm_mday=6, tm_hour=11, tm_min=28, tm_sec=2, tm_wday=2, tm_yday=157, tm_isdst=0)
4.mktime(t) : 将一个struct_time转化为时间戳。
print(time.mktime(time.localtime())) >>>> 1528284613.0
5.asctime([t]) : 把一个表示时间的元组或者struct_time表示为这种形式:'Sun Jun 20 23:21:05 1993'。
参数为空时,默认为当前时间
print(time.asctime(time.localtime())) print(time.asctime()) >>>> Wed Jun 6 19:33:52 2018 Wed Jun 6 19:33:52 2018
6.ctime([secs]) : 把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式。如果参数未给或者为
None的时候,将会默认time.time()为参数。它的作用相当于time.asctime(time.localtime(secs))。
print(time.ctime()) >>>>> Wed Jun 6 19:38:34 2018
7. strftime(format[, t]) : 把一个代表时间的元组或者struct_time(如由time.localtime()和time.gmtime()返回)转化为格式化的时间字符串。
如果t未指定,将传入time.localtime()。如果元组中任何一个元素越界,ValueError的错误将会被抛出。
print(time.strftime("%Y-%m-%d %X", time.localtime())) >>>> 2018-06-06 19:41:51
8 time.strptime(string[, format])
把一个格式化时间字符串转化为struct_time。实际上它和strftime()是逆操作。
在这个函数中,format默认为:"%a %b %d %H:%M:%S %Y"。
print(time.strptime('2011-05-05 16:37:06', '%Y-%m-%d %X')) >>>>> time.struct_time(tm_year=2011, tm_mon=5, tm_mday=5, tm_hour=16, tm_min=37, tm_sec=6, tm_wday=3, tm_yday=125, tm_isdst=-1)
9.sleep(secs) 线程推迟指定的时间运行,单位为秒。
10.这个需要注意,在不同的系统上含义不同。在UNIX系统上,它返回的是“进程时间”,它是用秒表示的浮点数(时间戳)。
而在WINDOWS中,第一次调用,返回的是进程运行的实际时间。
而第二次之后的调用是自第一次调用以后到现在的运行时间,即两次时间差。
四、random 模块 (随机数)
1.random() 用于生成一个0到1的随机符点数: 0 <= n < 1.0
print(random.random()) >>>>> 0.47674138932530974
2.randint(x,y) 用于生成一个指定范围内的整数
print(random.randint(1,2)) >>>> 2
3.randrange()从指定范围内,按指定基数递增的集合中获取一个随机数
print(random.randrange(1,10)) >>>> 8
4.uniform() 用于生成一个指定范围内的随机符点数
print(random.uniform(1, 10)) >>>> 5.244662335538338
5.choice() 从序列中随机生成一个随机元素
print(random.choice('nice')) >>>> e
6.shuffle(list) 用于将一个列表中的元素打乱
li = ['nick','jenny','car',] random.shuffle(li) print(li) >>>>> ['nick', 'car', 'jenny']
7.sample()从指定序列中随机获取指定长度的片断
li = ['nick','jenny','car',] print(random.sample(li,2)) #从li中随机获取2个元素,作为一个片断返回
>>>> ['jenny', 'nick']
验证码实例:
def v_code(): code='' # l=[] for i in range(4): num=random.randint(0,9) ALF=chr(random.randint(65,90)) alf=chr(random.randint(97,122)) # l.append(num) # l.append(ALF) # l.append(alf) # add=random.choice(l) add=random.choice([num,ALF,alf]) code +=str(add) return code print(v_code())