python 入门 day16

一、模块的循环导入

在模块之间互相导入,这个模块需要另一个模块的内容。(不推荐使用)

当 import 在代码之前时,模块创立名称空间未执行完程序就导入其他模块,模块里的名字无法放入名称空间,执行文件无法获取所需内容。

两种解决方案:

第一种:

把 import + 模块名 放在代码之后

第二种:(推荐使用)

把 import + 模块名 放入函数中

m1:

print('正在导入m1')

def func1():
    from m2 import y,func2
    print('来自与m2的y: ',y)
    func2()

x='m1'

m2:

print('正在导入m2')

def func2():
    from m1 import x
    print('来自m1的x: ',x)
y='m2'

run:

import m1


m1.func1()

二、包的使用

1.什么是包

​ 包就是一个含有__ init __.py文件的文件夹

2.为何要用包

​ 将功能打包,方便开发者进行开发新功能

3.如何用包

​ 创建一个含有__ init __.py文件的文件夹,将功能模块放入这个文件夹中,通过执行文件导入包,使用模块的功能。

1544000567611

执行文件.py (放在了dir文件夹外)

import sys
sys.path.append(r'D:\day16\dir')        #r'包所在的上一层路径' :绝对路径
import aaa
print(aaa.xxx)
aaa.func1()
aaa.f1()
aaa.fff()

dir文件夹:aaa文件夹: __ init __.py文件

xxx=111
from .m1 import func1       # .m1 这种相对路径只能在包里才可以使用(aaa文件夹)
from aaa.m2 import f1       # aaa.m2 为f1 的 绝对路径,基于aaa文件夹
from .bbb.m3 import fff     #.bbb.m3 当前目录下使用相对路径  (当前目录可以省略).bbb.m3

aaa文件夹:m1.py

def func1():
    print('from func1')

aaa文件夹:m2.py

def f1():
    print('from f1')

aaa文件夹:bbb文件夹:m3.py

def fff():
    print('from fff')

三、json与pickle模块

1.什么是序列化

​ 序列化就是将内存中的数据类型转成另外一种格式

​ 即:

​ 字典--------序列化----------->其他的格式------------------>存到硬盘

​ 硬盘------------>读取-------->其他的格式----反序列化--->字典

2.为什么要序列化

​ 1.持久保存程序的运行状态

​ 2.数据的跨平台交互

3.如何序列化

​ json: json格式不能识别单引号 (用于跨平台数据交互) 没有集合

​ 优点:这种格式是一种通用的格式,所有编程语言都能识别

​ 缺点:不能识别所有python类型

​ pickle: (不需要跨平台时使用)

​ 优点:能识别所有python类型

​ 缺点:只能被python这门编程语言识别

json的序列化:

import json
dic={'k1':True,'k2':10,'k3':'egon','k4':'你好啊'}
#序列化
dic_json=json.dump(dic)
print(dic_json,type(dic_json))
#持久化
with open('a.json','wt',encoding='utf8') as f:
    f.write(dic_json)

json的反序列化:

#从文件中读取json格式化的字符
import json
with open('a.json','rt',encoding='utf8') as f:
    dic_json=f.read()
#反序列化
dic=json.loads(dic_json)
print(dic,dic['k1'])

json 综合使用

import json
dic={'k1':True,'k2':10,'k3':'egon','k4':'你好啊'}
#序列化+持久化
with open('a.json','wt',encoding='utf8') as f:
    json.dump(dic,f)
    
#读取文件内容+反序列化
with open('a.json','rt',encoding='utf8') as f:
    dic=json.load(f)    #loads需要f.read(),load 不需要 f.read()步骤
    print(dic,dic['k1'])

pickle的序列化:

import pickle
s={1,2,3,4}
s_pkl=pickle.dumps(s)
with open('b.pkl','wb') as f:
    f.write(s_pkl)

pickle的反序列化:

with open('b.pkl','rb') as f:
    s_pkl=f.read()
    s=pickle.loads(s_pkl)
    print(s,type(s))

pickle的综合使用

import pickle
s={1,2,3,4}
with open('b.pkl','wb') as f:
    pickle.dump(s,f)
    
with open('b.pkl','rb') as f:
    s=pickle.load(f)
    print(s,type(s))

四、time与datetime模块

time模块:时间分为三种格式:

​ 1.时间戳

print(time.time())  #1970-1-1 0:0:0 到现在经过的秒数

​ 2.格式化的字符

print(time.strftime('%Y-%m-%d %H:%M:%S %p'))    #年-月-日 时:分:秒 上午\下午

​ 3.结构化的时间对象

print(time.localtime())     #本地时间 东八区时间
#time.struct_time(tm_year=2018, tm_mon=12, tm_mday=5, tm_hour=19, tm_min=19, tm_sec=16, tm_wday=2, tm_yday=339, tm_isdst=0)
#年,月,日,时,分,秒,星期,这一年的第几天,时令
print(time.localtime().tm_hour)
print(time.localtime().tm_wday)
print(time.localtime().tm_yday)
print(time.gmtime())    #格林威治时间 和东八区相差 8小时

时间转换

时间戳---->struct_time------->格式化的字符串

struct_time=time.localtime(123123)
print(struct_time)

print(time.strftime('%Y-%m-%d',struct_time))

格式化的字符串---->struct_time------->时间戳

struct_time=time.strptime('2017-03-11','%Y-%m-%d')
print(struct_time)

print(time.mktime(struct_time))

datetime模块:

import datetime                     #日期模块 格式化时间
print(datetime.datetime.now())      #现在的时间

print(datetime.datetime.fromtimestamp(1231231))     #时间转换

print(datetime.datetime.now() + datetime.timedelta(days=3))     #三天后的时间
print(datetime.datetime.now() - datetime.timedelta(days=3))     #三天前的时间
print(datetime.datetime.now() + datetime.timedelta(days=-3))    #三天前的时间
print(datetime.datetime.now() + datetime.timedelta(days=3,hours=3)) #三天零三小时

五、random模块

import random           #随机模块

print(random.random())              #随机生成0~1之间的小数
print(random.randint(1,3))          #随机生成1~3的整数
print(random.randrange(1,3))        #随机生成1~2的整数
print(random.uniform(1,3))          #随机生成1~3之间的小数

print(random.choice([1,'a','c']))   #随机生成[1,'a','c']中的一个数
print(random.sample([1,'a','c'],2)) #随机生成[1,'a','c']中的两个数


item=[1,3,5,7,9]
random.shuffle(item)    #打乱列表中的数,比如洗麻将
print(item)

随机码的生成

import random
def make_code(max_size):
    res=''
    for i in range(max_size):
        num=str(random.randint(0,9))        #数字0~9选一个,变成字符串格式
        alp=chr(random.randint(65,90))      #大写字母ASCII表 65~90:A~Z 随机取一个

        res+=random.choice([num,alp])       #两个中拿一个

    return res


print(make_code(10))

猜你喜欢

转载自www.cnblogs.com/wujinsheng/p/10073103.html
今日推荐