#-*- coding=utf-8 -*-
#!/usr/bin/env python3
#-*- coding: utf-8 -*-
#@time : 2020/5/15 23:46
#@author : "小多肉"
#@email : [email protected]
"""todo:
1、實現乙個網路請求超時重試的裝飾器,裝飾下面的功能函式
如果請求網路超時,或者連線超時,可以重新傳送請求,如果重試三次之後,還是超時,丟擲對應的異常
2、請設計乙個裝飾器,接收乙個int型別的引數number,可以用來裝飾任何的函式,
如果函式執行的時間大於number,則列印出函式名和函式的執行時間 (面試真題)
3、 請設計乙個裝飾器 ,可以給函式擴充套件登入認證的功能(提示數賬號密碼,然後進行校驗),
多個函式同時使用這個裝飾器, 呼叫函式的時候,只要登入成功一次,
後續的函式無需再進行登入(預設的認證賬號:qwe123,密碼:123456)
(面試真題)
"""#
###########################第一題##################################
defretry(fun):
for i in range(4):
try:
res = fun(*args, **kwargs)
except
exception as e:
if i ==0:
print(f"
第一次請求失敗!!!\n正在嘗試為您重新發起請求。")
else
:
print(f"
第次重試……")
if i == 3:
raise
e
continue
else
:
print("
請求成功!!!
---------------------第一題-------------------------")
---------------------第一題異常情況-------------------------")
重試三次都失敗了,丟擲異常。")
#############################第二題#################################
"""2、請設計乙個裝飾器,接收乙個int型別的引數number,可以用來裝飾任何的函式,
如果函式執行的時間大於number,則列印出函式名和函式的執行時間 (面試真題)
"""import
time
defperformance(number):
defdecorator(fun):
start_time =time.time()
print("
-------start--------
", start_time)
fun(*args, **kwargs)
end_time =time.time()
print("
-------end--------
", end_time)
dur_time = end_time -start_time
if dur_time >number:
print(f"
函式的執行時間為:")
-------------------第二題---------------------------")
"")#############################第三題#################################
"""3、 請設計乙個裝飾器 ,可以給函式擴充套件登入認證的功能(提示數賬號密碼,然後進行校驗),
多個函式同時使用這個裝飾器, 呼叫函式的時候,只要登入成功一次,
後續的函式無需再進行登入(預設的認證賬號:qwe123,密碼:123456)(面試真題)
"""login_flag =0
deflogin_check(func):
global
login_flag
if func.__name__ == "
login":
func()
elif
login_flag:
func(*args, **kwargs)
else
:
print("
檢測到您未成功登入,請先登入。")
return
@login_check
deflogin():
account = input("
請輸入賬號:")
password = input("
請輸入密碼:")
if account == "
qwe123
"and password == "
123456":
global
login_flag
login_flag = 1
else
:
print("
使用者名稱或密碼錯誤!登入失敗!!!")
@login_check
deffunc1():
print("
函式1"
)@login_check
deffunc2():
print("
函式2"
)@login_check
deffunc3():
print("
函式3"
)print("
------------第三題-----------")
func1()
login()
func2()
func3()
裝飾器實現單例模式
用裝飾器實現單例模式,應該算乙個很不錯的例子。我們知道,python中裝飾器無非是對物件的重新包裝,這個物件可以是函式,也可以是乙個類 decorate def test 相當於 test decorate test def decorate func def wrap args,kwargs re...
python裝飾器實現單例模式
基本思想為 1 在裝飾器中新增乙個字典型別的自由變數 instance 2 在閉包中判斷類名是否存在於 instance中,如果不存在則建立乙個類的事例,並講其新增到字典中 如果存在則不進行例項化,直接返回字典中的例項 def singleton cls instance def singleton...
Python裝飾器實現單例模式
coding utf 8 使用裝飾器 decorator 這是一種更pythonic,更elegant的方法,單例類本身根本不知道自己是單例的,因為他本身 自己的 並不是單例的 def singleton cls,args,kw instances def singleton if cls not ...