裝飾器和單例模式練習

2022-07-27 08:00:15 字數 3604 閱讀 7979

#

-*- 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 ...