骑骡子赶猪  


装饰器
目的: 不改变原来代码的基础上. 给函数添加新功能
动态代理. 拦截器

通用装饰器的写法
def wrapper(fn):
def inner(*args, **kwargs):
'''之前'''
ret = fn(*args, **kwargs)
'''之后'''
return ret
return inner

@wrapper
def login():
pass

带参数的装饰器
def wrapper_out(flag):
def wrapper(fn):
def inner(*args, **kwargs):
if flag:
print("问问老板, 行情怎么样")
else:
print("自己去")
ret = fn(*args, **kwargs)
print("亲人两行泪")
return ret
return inner
return wrapper

@wrapper_out(False)
def yue():
print("约me?")

@wrapper_out(True)
def chi():
print("吃饭去了")

yue()
chi()


*********************************************************************************************************************
Stack
栈, 先进后出
Queue
队列, 先进先出


class StackFullError(Exception):
pass


class StackEmptyError(Exception):
pass


class Stack:
def __init__(self, size):
self.size = size
self.lst = []
self.top = 0 # 下一个元素准备装的位置

def push(self, el):
# self.lst[self.top] = el # 报错
if self.top == self.size:
raise StackFullError('满了')
self.lst.insert(self.top, el)
self.top += 1 # 栈顶指针. 向上移动

def pop(self):
if self.top == 0:
raise StackEmptyError("空的")
self.top -= 1 # 先移动站定指针
data = self.lst[self.top]
del self.lst[self.top]
return data


s = Stack(6)
s.push("1")
s.push("2")
s.push("3")
s.push("4")
s.push("5")
s.push("6")

print(s.pop())
print(s.pop())
print(s.pop())
print(s.pop())
print(s.pop())
print(s.pop())
print(s.pop())
*********************************************************************************************************************

asyncio是一个底层模块
他完成了几个任务的轮流检测io,并且在遇到io的时候能够及时在任务之间进行切换
然后达到使用单线程实现异步的方式

import asyncio
async def func():
print('111')
await asyncio.sleep(1)
print('222')

loop=asyncio.get_event_loop()
a=loop.create_task(func()) #任务a
b=loop.create_task(func()) #任务b

loop.run_until_complete(asyncio.wait([a,b]))




posted on 2019-02-21 20:35  骑骡子赶猪  阅读(132)  评论(0编辑  收藏  举报