裝飾器
目的: 不改變原來代碼的基礎上. 給函數添加新功能
動態代理. 攔截器
通用裝飾器的寫法
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]))