函式裝飾器

2022-08-19 20:09:10 字數 4330 閱讀 2216

#-----函式裝飾器-----

1、作用域:l _e_g_b

2、高階函式 a、函式名可以作為引數輸入 b、函式名可以作為返回值

3、閉包

1

defouter():

2 x = 10

3def inner(): #

inner是內部函式

4print(x) #

外部環境的乙個變數

5return inner #

內部函式inner就是乙個閉包

6outer()()78

#inner() #1、區域性變數,全域性變數無法呼叫

#-----關於閉包-----

閉包 = 函式 + 定義函式時的環境

#**原則:開放封閉原則  **書寫原則(對修改封閉,對擴充套件開放)

#-----裝飾器函式

1

import

time23

def show_time(f): #

裝飾器函式

4def

inner():

5 start =time.time()

6f()

7 time.sleep(1)

8 end =time.time()

9print("

spend %s

"% (end-start))

10return

inner

1112

@show_time

13def

foo():

14print('

test')

15#foo=show_time(foo)

16foo()

1718

@show_time

19def

bar():

20print('

bar')21

#bar = show_time(bar)

22bar()

2324

defshow_time(f):

25def

inner(x,y):

26 start =time.time()

27f(x,y)

28 time.sleep(1)

29 end =time.time()

30print(end-start)

31return

inner

3233

@show_time

34def

add1(a,b):

35print(a+b)

36 add1(1,2)

#-----裝飾器加引數

1

def logger(flag='

false'):

2def

show_time(f):

3def inner(*args):

4 start_time =time.time()

5 f(*args)

6 time.sleep(1)

7 end_time =time.time()

8print(end_time-start_time)

9if flag == "

true":

10print('

log!')

11return

inner

12return

show_time

1314 @logger('

true')

15def add(*args):

16 sum1 =0

17for i in

args:

18 sum1 +=i

19print

(sum1)

2021 add(1,2,4)

#-----使用者資訊登入驗證小程式-----

#-----建立用名密碼

1

import

json23

defcreate_user(a,b,c,d):

4 d =

8 with open(c,"w"

) as f:

9json.dump(d,f)

10 create_user("

dream

","abc123

","jd.json

","jd_list")

11 create_user("

rise

","rise123

","qq.json

","qq_list")

12 create_user("

wx","

wx123

","wx.json

","wx_list

")

#-----使用者資訊驗證
1

import

json

23 login_status = "

false"4

deflogin(auth_type):

5def

verify(func):

6def

inner():

7global

login_status

8 flag =true

9while

flag:

10 c_list = ['

jd','

qq','wx'

]11for i in

c_list:

12if auth_type ==i.strip():

13 files =auth_type

14 u_name = input("

please input %s name:

" %files).strip()

15 u_passwd = input("

please input %s passwd:

" %files).strip()

16 with open(("

%s.json

") % files, "r"

) as f:

17 data =dict(json.load(f))

18 name = data["

name"]

19 passwd = data["

passwd"]

20if u_name == name and u_passwd ==passwd:

21 login_status = "

true"22

func()

23 flag =false

24else:25

func()

26return

inner

27return

verify

2829 @login("jd"

)30defhome():

31print("

welcome to home page")

32home()

3334 @login("qq"

)35deffinance():

36print("

welcome to finance page")

37finance()

3839 @login("wx"

)40defbook():

41print("

welcome to book page")

42 book()

函式裝飾器 類裝飾器

一 函式裝飾函式 defwrapfun func definner a,b print function name func.name r func a,b return r return inner wrapfun defmyadd a,b return a b print myadd 2,3 二...

python裝飾器 函式裝飾器,類裝飾器

只要實現此 模式,這個obj就叫乙個裝飾器 參考 函式裝飾器 例子 def decorator func def inner args,kwargs print before.res func args,kwargs print after.return res return inner decor...

python 裝飾器 函式裝飾器 類裝飾器

python函式裝飾器和類裝飾器筆記.usr bin env python coding utf 8 author ivan file decorators.py version from functools import wraps 裝飾器 目的是為了給函式新增附加功能 1.不帶引數裝飾器 此方式...