Day16模块

Day16

当做执行文件时
__name__ = "__main__"
当做模块被导入时
__name__ 等于文件名即模块名
```python
循环导入(模块的名称空间已经建立,但模块内导入语句后的名称未加入到名称空间中,导致另一个模块导入不到,报错)
解决循环的导入的两种方案:
1.名字放在导入前,避免找不到名称
2.导入放在函数内,函数在定义时不会执行,保证了模块内的名称创建完全
!!!!首次导入模块的三件事:1.创建模块的名称空间   2.执行模块内的代码   3.在执行文件中拿到模块中名字
    再次导入时,直接调用上一次的结果,不会再创建模块的名称空间

1.包
什么是包:

包就是一个含有__init__.py的文件夹

为何要用包
导入包

1.创建名称空间
2.执行包下的__init__.py
3.
相对导入仅限于包内文件 互相导入
.当前文件夹
..上一级文件夹

2.json&pickle
什么是序列化
将内存中的数据类型转成另外一种格式

序列化:字典>>>序列化>>>其他格式>>存到硬盘
​ 硬盘>>>读取>>>其他格式>>>反序列化>>>字典

为何是序列化
1.持久保存程序的运行状态
2.数据的跨平台交互

json:
字符串
优点:跨平台性强
确定:不能识别所有python数据类型
强调:json格式不能识别单引号

import json
dic = {"k1":True,"k2":10,"k3":"egon"}
dic_json = json.dumps(dic)
dic_json = {"k1":true,"k2":10,"k3":"egon"}#json格式的字符串
type(dic_json) = str

pickle:
优点:能识别所有python类型
缺点:只能被python这门编程语言识别

import pickle
dic = {"k1":True,"k2":10,"k3":"egon"}
dic_pickle = pickle.dumps(dic)
dic_pickle #pickle模式的二进制
type(dic_json) = bytes

如何序列化

3.time模块

1.时间戳
time.time()

2.格式化字符串

time.strftime("%Y-%m-%d %H:%M:%s %p")

3.结构化的时间对象

time.localtime()
time.gmtime()
差8小时
time.localtime.tm_hour
time.localtime.tm_wday
time.localtime.tm_yday

datetime模块
time模块获取结构化时间麻烦:datetime.datetime.now()
时间戳与格式化时间无法 :datetime.datetime.fromtimestamp()
datetime.datetime.now() + datetime.timedelta()

random
随机

import random
random.random( ) 0到1之间的任意小数
random.randint(1,3) 1到3之间的整数
random.randrange(1,3) 顾头不顾尾,[1,2]
random.choice([1,"a",[1,2,3]])指定范围
random.sample([1,2,3,4,5],3)从指定范围取出一定数量
random.uniform(1,3) (1,3)之间的小数,可以指定范围
item = [1,3,5,7,9]
random.shuffle(item) 洗牌

def make_code(n):
s1 = str(random.randint(0,9))
s2 = chr(random.randint(65,90))
s3 = chr(random.randint(97,122))
res = s1+s2+s3
for i in range(n-3):
s = random.choice([str(random.randint(0,9)),chr(random.randint(65,90)),chr(random.randint(97,122))])
res += s
print(res)
return res
make_code(6)

3.re&正则表达式

猜你喜欢

转载自www.cnblogs.com/robert-zhou/p/10073972.html