一、装饰器
前戏:
1.函数即变量
(1)函数名为‘门牌号’即内存地址,加括号开始调用
(2)没有变量调用将清空内存
(3)匿名函数(lambda函数):没有‘门牌号’,需要赋值给变量,否则将会被清空
2.高阶函数
(1)将函数名作为实参传给另一个函数(不改变源代码的情况下添加功能)
(2)将函数名作为另一个函数的返回值(不改变调用方式)
3.嵌套函数:在函数体内用def再定义一个函数
正餐:
1、装饰器的作用:在不改变源代码和调用方式的情况下为原程序添加功能,以提高扩展性
2、装饰器的构成:嵌套函数+高阶函数
1 #Author:Barry 2 import time 3 4 def timer(func): 5 def dec(*args): 6 stat_time = time.time() 7 func(*args) 8 stop_time = time.time() 9 print('time is %s'%(stop_time-stat_time)) 10 return dec 11 12 @timer #test = timer(test) = dec 13 def test1(): 14 time.sleep(3) 15 print("in this test1") 16 17 @timer #test = timer(test) = dec 18 def test2(name,age): 19 time.sleep(3) 20 print("in this test2",name,age) 21 22 test1() 23 test2("Barry",22)
二、迭代器
1.提前存在数据,并直接生成所有数据
2.列表生成式
3.可迭代对象:可用for循环
4.迭代器对象:可被next()调用并不断返回下一个值的对象
三、生成器
1.在调用时才生成相应的数据,可节省内存
2.方法:
(1)Next:执行下一步
(2)Send:可向yield传参
斐波那契数列:
1 #Author:Barry 2 def fib(max): 3 a,b,n = 0,1,0 4 while n<max: 5 yield b 6 a,b = b,a+b 7 n = n + 1 8 return '牛逼' 9 f = fib(10) 10 while True: 11 try: 12 i = next(f) 13 print(i) 14 except StopIteration as ex: 15 print(ex.value) 16 break
简单并发:
#Author:Barry import time def consumer(name): print('%s准备吃包子了'%name) while True: baozi = yield print('%s包子来了,%s快来吃包子'%(baozi,name)) # c = consumer('Barry') # c.__next__() # c.send('韭菜馅') def producer(name): c = consumer('A') c2 = consumer('B') c.__next__() c2.__next__() print('开始做包子') for i in range(10): time.sleep(1) print('做了一个包子,分了两瓣') c.send(i) c2.send(i) producer('Barry')
四、内置函数简介
五、Json序列化
功能:不同语言之间数据系统交互
序列化:
#Author:Barry import json info = { 'name':'Barry', 'age': 22 } f = open('test','w') # print(json.dumps(info)) f.write(json.dumps(info))
反序列化:
#Author:Barry import json f = open('test','r') data = json.loads(f.read()) print(data)
六、合理目录结构