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)

 




posted on 2016-11-12 09:25  灵魂与梦想  阅读(180)  评论(0编辑  收藏  举报

导航