装饰器,栈 ,asyncio 代码



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

通用装饰器的写法
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 asyncioasync def func():    print('111')    await asyncio.sleep(1)    print('222')loop=asyncio.get_event_loop()a=loop.create_task(func()) #任务ab=loop.create_task(func()) #任务bloop.run_until_complete(asyncio.wait([a,b]))
相关文章
相关标签/搜索