190401裝飾器 高階函式 閉包

2022-07-02 21:39:20 字數 4814 閱讀 6793

裝飾器本質是函式

為其他函式新增附加功能

不修改被修飾函式的源**

不修改被修飾函式的呼叫方式

import time

def timmer(func):

start_time = time.time()

res = func(*args,**kwargs)

stop_time = time.time()

return res

@timmer

def calc(l):

s = 0

for i in l:

s += i

time.sleep(0.1)

return s

print(calc(range(20)))

import time

def timmer(func):

start_time = time.time()

func() #執行傳進來的f函式

stop_time = time.time()

print("函式的執行時間是: %s" % (stop_time - start_time))

@timmer #f = timmer(f) #將f函式傳給timmer

def f():

time.sleep(3)

print("f 函式執行完成。")

import time

def timmer(func):

start_time = time.time()

res = func() #執行傳進來的f函式

stop_time = time.time()

print("函式的執行時間是: %s" % (stop_time - start_time))

return res #將f函式的返回值返回

@timmer #f = timmer(f) #將f函式傳給timmer

def f():

time.sleep(3)

print("f 函式執行完成。")

return "f函式的返回值"

import time

def timmer(func):

start_time = time.time()

res = func(*args,**kwargs) #執行傳進來的f函式

stop_time = time.time()

print("函式的執行時間是: %s" % (stop_time - start_time))

return res #將f函式的返回值返回

@timmer #f = timmer(f) #將f函式傳給timmer

def f(name):

time.sleep(1)

print("f 函式執行完成。函式的引數是:%s" %name)

return "f函式的返回值"

print(res)

def auth(func):

def warpper(*args,**kwargs):

username = input("your username: ")

password = input("your password: ")

if username == "dongfei" and password == "123":

res = func(*args,**kwargs)

return res

else:

print("username or password error!")

return warpper

def index():

print("welcome to my index page.")

@auth

def home(name):

print("%s go home" %name)

@auth

def shopping_car():

print("your shopping_car")

index()

home("dongfei")

shopping_car()

user_list = [,,

,,

]current_dic =

def auth(func):

def warpper(*args,**kwargs):

if current_dic["username"] and current_dic["login_status"]:

res = func(*args, **kwargs)

return res

username = input("your username: ")

password = input("your password: ")

for user_dic in user_list:

if username == user_dic["username"] and password == user_dic["password"]:

current_dic["username"] = username

current_dic["login_status"] = true

res = func(*args,**kwargs)

return res

else:

print("username or password error!")

return warpper

def index():

print("welcome to my index page.")

@auth

def home(name):

print("%s go home" %name)

@auth

def shopping_car():

print("your shopping_car")

index()

home("dongfei")

shopping_car()

user_list = [,,

,,

]current_dic =

def auth(auth_type):

def auth_func(func):

def warpper(*args,**kwargs):

if auth_type == "file_db":

if current_dic["username"] and current_dic["login_status"]:

res = func(*args, **kwargs)

return res

username = input("your username: ")

password = input("your password: ")

for user_dic in user_list:

if username == user_dic["username"] and password == user_dic["password"]:

current_dic["username"] = username

current_dic["login_status"] = true

res = func(*args,**kwargs)

return res

else:

print("username or password error!")

elif auth_type == "mysql_db":

print("請使用%s認證:" %auth_type)

else:

print("無效的認證型別")

return warpper

return auth_func

@auth("ldap")

def index():

print("welcome to my index page.")

@auth(auth_type="mysql_db") # @auth(auth_type="mysql") 等於 @auth_func

def home(name):

print("%s go home" %name)

@auth(auth_type="file_db")

def shopping_car():

print("your shopping_car")

index()

home("dongfei")

shopping_car()

函式接受的引數是乙個函式名

函式的返回值是乙個函式名

滿足以上條件的任意乙個都是高階函式

import time

def foo():

print("from foo")

time.sleep(2)

def timmer(func):

start_time = time.time()

func()

stop_time = time.time()

return func

foo = timmer(foo)

foo()

>>> a,*_,c = [1,2,3,4,5,6,7,8]  #取第乙個和最後乙個值

>>> a

1>>> c

8>>> _

[2, 3, 4, 5, 6, 7]

裝飾器 高階函式 閉包 函式巢狀

裝飾器 本質就是函式,作用是給其他函式新增新功能 1 不修改被修飾函式的源 2 不修改被修飾函式的呼叫方法 import time deftimmer func def args,kwargs start time time.time res func args,kwargs end time ti...

高階函式 閉包和裝飾器介紹

其表現形式有兩種,一是以函式 可以乙個或多個 做為引數傳遞,一是以函式做為返回值返回,如下圖 2.匿名函式 用lambda表示式建立一些簡單的函式,它執行完畢後會立刻銷毀 語法 lambda 引數 表示式 如求兩數的乘積 通常與filter配合使用,filter 是乙個高階函式,需將函式作為引數來傳...

裝飾器2 高階函式 函式巢狀 閉包

高階函式定義 1.函式接受的引數是乙個函式名 2.函式的返回值是乙個函式名 3.滿足上訴條件任意乙個,都可稱之為高階函式 1 deftest 2print 你好啊 3 defhigh func func 4print 高階函式 5func 6high func test 7輸出 8高階函式 9 你好...