這篇文章主要是在紀錄 python decorator 的學習過程,
有錯或是更好的寫法的話,歡迎留言討論!!
裝飾器可以幫助我們更加精簡我們的程式碼,舉凡 Flask、FastAPI 等 module 都有使用
更加詳細的介紹可以參考 這個網址
def demo_decorator(callback):
def add():
print("測試裝飾器")
# 測試用內容,會印出累加
tmp = 0
for i in range(10):
tmp += i
print(tmp)
# 呼叫 callback 也就是帶有裝飾器的函式本身
callback()
# 規定要回傳裝飾器內的函式
return add
@demo_decorator
def demo_main_function():
print("測試函式")
if __name__ == '__main__':
demo_main_function()
在網路爬蟲當中,我們常常會遇到需要重試請求的情況,碰到這種情況,我們可以利用 decorator 進行重試
import requests
def retry_decorator(callback):
def retry(url, retry_time):
recoder = 0
while recoder < retry_time:
try:
return callback(url)
except requests.exceptions.RequestException:
print("請求錯誤")
recoder += 1
return retry
@retry_decorator
def demo_main_function(url):
res = requests.get(url)
print(res.status_code)
if __name__ == '__main__':
# correct url
demo_main_function("https://google.com.tw", 3)
print("-------------------")
# wrong url
demo_main_function("https://test.test.test", 3)
C:\Users\nick\Desktop\deacorator_testt\venv\Scripts\python.exe C:/Users/nick/Desktop/deacorator_testt/main.py
200
-------------------
請求錯誤
請求錯誤
請求錯誤
Process finished with exit code 0