Python之路,day5-Python基础
for#列表生成式
1 data = [1,2,3,4,5,6,7] 2 3 #####列表生成式 4 #data = [i+1 for i in data] 5 6 data = [i*2 if i>5 else i for i in data] 7 8 print(data) 9 10 11 data = [i//2 if i>4 else i for i in data] 12 13 print(data)
1.生成器
yield a #返回a,同时挂起当前这个函数
yield a #返回a, 同时挂起当前这个函数, a返回给了通过__next__()调用当前函数的人
这代表通过就是实现了函数的中断,并且保存了函数的中间执行状态
1 # data = ( x*2 for x in range(5)) 2 # 3 # #print(data) 4 # 5 # # for i in data: 6 # # print(i) 7 # 8 # print(data.__next__()) 9 # print(data.__next__()) 10 # print(data.__next__()) 11 # print(next(data)) 12 # print(next(data)) 13 14 15 def fib(num):#循环次数 16 count = 0 17 a,b = 0,1 18 while count<num: 19 tmp = a 20 a = b 21 b = a + tmp 22 print(a) 23 count +=1 24 yield a 25 26 f=fib(10) 27 f.__next__() 28 next(f) 29 30 a,b = 3,5 31 a,b = b,a+b 32 print(a)
2.迭代器
3.装饰器
完全符合 开放-封闭原则
不改变原有功能代码,不改变原有调用方式
实现扩展新的功能
1 user_status = False 2 3 def login(func): 4 def inner(): 5 _username = "hsc" 6 _password = "qwer" 7 global user_status 8 9 if user_status == False: 10 username = input("user:") 11 password = input("password:") 12 13 if username == _username and password == _password: 14 print("welcome lalala...") 15 user_status = True 16 else: 17 print("wrong username or password") 18 19 if user_status == True: 20 func() 21 return inner 22 23 def home(): 24 print("---首页---") 25 26 @login 27 def america(): 28 print("---欧美专区---") 29 30 def japan(): 31 print("---japan---") 32 33 @login 34 def henan(): 35 print("---henan---") 36 37 home() 38 39 america() 40 41 henan()
4.模块
import auth #导入整个模块
from auth import login #导入auth的login函数
__file__ 相对路径
os.path.abspath 相对路径转为绝对路径
1 import sys 2 import os 3 BaseDir = os.path.abspath( os.path.dirname(os.path.dirname(__file__))) 4 print(BaseDir) 5 BaseDir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 6 print(BaseDir) 7 sys.path.append(BaseDir) 8 print(sys.path) 9 10 from day4 import test
5.并发
1 import time 2 def consumer(name): 3 print("%s 准备吃包子啦!"%name) 4 while True: 5 baozi = yield 6 print("包子[%s]来了,被[%s]吃了!"%(baozi,name)) 7 8 def producer(name): 9 c = consumer('A') 10 c2 = consumer('B') 11 c.__next__() 12 c2.__next__() 13 print("开始准备做包子了!") 14 for i in range(10): 15 time.sleep(1) 16 print("做了2个包子!") 17 c.send(i) 18 c2.send(i) 19 producer("hsc") 20 21 22 #send 传递数据给yield
py2
目录里没有__init__,那就只是一个目录,目录是不可以被导入的
有__init__,那这个目录就变成了 “包”==package
pypi 公共模块库
序列化:把内存对象转成字符串形式,就叫序列化
把一个字符串专成对应的内存对象,就叫反序列化
作用:持久化内存数据对象
json #支持所有语言,支持字符串,字典等数据类型,但是函数不行
序列化
1 import json 2 3 def sayhi(): 4 print('hey') 5 6 data = { 7 'name':'hsc', 8 'age':18, 9 'func':sayhi 10 } 11 12 f = open('data.txt','w') 13 # f.write(str(data)) 14 # 15 # f = open('data.txt','r') 16 # data = eval(f.read()) 17 # print(data) 18 19 #json.dumps() 20 #json.dump() 21 #json.loads() 22 #json.load() 23 f.write(json.dumps(data)) 24 25 #=========================== 26 27 f.close()
反序列化
1 import json 2 3 f = open('data.txt',encoding='utf-8') 4 # data = json.loads(f.read()) 5 6 7 data = json.load(f) 8 9 print(data['age']) 10 11 f.close()
pickle #仅限于python语言,支持所有数据类型
序列化
1 import pickle 2 3 def sayhi(): 4 print('hey') 5 data = { 6 'name':'hsc', 7 'age':18, 8 'func':sayhi 9 } 10 11 12 f = open('data.pkl','wb') 13 f.write(pickle.dumps(data))
反序列化
1 import pickle 2 3 f = open('data.pkl','rb') 4 data = pickle.loads(f.read()) 5 6 print(data)