装饰器概念及运用
#!/user/bin/env python3
# -*-encoding="utf-8"-*-
# 1.裝飾器概念
#裝飾器本身就是函數(shù),為別的函數(shù)添加附加功能。把握兩個(gè)遵循的條件。
# 1.不修改被修飾的源代碼內(nèi)容。
# 2.不修改被修飾函數(shù)的調(diào)用方式。
# 裝飾器=高階函數(shù)+函數(shù)嵌套+閉包
# 高階函數(shù)定義:
# 1.函數(shù)接收的參數(shù)是一個(gè)函數(shù)名
# 2.函數(shù)的返回值是一個(gè)函數(shù)名
# 3.滿(mǎn)足上述條件任意一個(gè),都可稱(chēng)之為高階函數(shù)
#把函數(shù)當(dāng)做參數(shù)傳給高階函數(shù):
# def foo():
# print("我的函數(shù)名是做為一個(gè)高階函數(shù)傳給其它的函數(shù)的")
# def fc1(fucn):
# print("我是函數(shù)fc1,接受函數(shù)%s傳過(guò)來(lái)的值" %fucn)
# fucn()
# def fc2(fucn):
# print("我是函數(shù)fc2,函數(shù)返回值是%s" %fucn)
# return fucn
# fc1(foo)
# fc2(foo)
# import time
# def foo():
# time.sleep(0.2)
# print("參數(shù)來(lái)自foo")
# def fc1(fucn):
# ks_time=time.time()
# fucn()
# js_time=time.time()
# print("函數(shù)%s運(yùn)行的時(shí)間是%s" %(fucn,js_time-ks_time))
# fc1(foo)
# import time
# def foo():
# print('from the foo')
#
# def timmer(func):
# start_time=time.time()
# return func
# stop_time=time.time()
# print('函數(shù)%s 運(yùn)行時(shí)間是%s' %(func,stop_time-start_time))
# foo=timmer(foo)
# foo()
# 高階函數(shù)總結(jié)
# 1.函數(shù)接收的參數(shù)是一個(gè)函數(shù)名
# 作用:在不修改函數(shù)源代碼的前提下,為函數(shù)添加新功能,
# 不足:會(huì)改變函數(shù)的調(diào)用方式
# 2.函數(shù)的返回值是一個(gè)函數(shù)名
# 作用:不修改函數(shù)的調(diào)用方式
# 不足:不能添加新功能
# 函數(shù)嵌套的例子:
# def father(name):
# print('from father %s' %name)
# def son():
# print('from son')
# def grandson():
# print('from grandson')
# grandson()
# son()
# print(father('xfz'))
#一層套一層的最里面的函數(shù)形成的就是一個(gè)閉包。
# 3.裝飾器的框架
# import time
# def zsq(func):
# def gongnenghanshu():
# ks_time=time.time()
# func()
# js_time=time.time()
# print("函數(shù)運(yùn)行的時(shí)間是:%s" %(js_time-ks_time))
# return gongnenghanshu
# # 例子:
# @zsq
# def foo():
# time.sleep(3)
# print("運(yùn)行了函數(shù)foo")
# res=zsq(foo) #這是間接方式實(shí)現(xiàn)的裝飾,但是更改了函數(shù)的調(diào)用方式.@語(yǔ)法甜糖,加到要調(diào)用裝飾器的前面
# res()
# foo()
#4.加返回值的方法 例2
import time
def zsq(func):
def gongnenghanshu():
ks_time=time.time()
res=func()
js_time=time.time()
print("函數(shù)運(yùn)行的時(shí)間是:%s" %(js_time-ks_time))
return res
return gongnenghanshu
# 例子:
@zsq
def foo():
time.sleep(1)
print("運(yùn)行了函數(shù)foo")
return "我是要添加的函數(shù)返回值"
z=foo()
print(z)
# -*-encoding="utf-8"-*-
# 1.裝飾器概念
#裝飾器本身就是函數(shù),為別的函數(shù)添加附加功能。把握兩個(gè)遵循的條件。
# 1.不修改被修飾的源代碼內(nèi)容。
# 2.不修改被修飾函數(shù)的調(diào)用方式。
# 裝飾器=高階函數(shù)+函數(shù)嵌套+閉包
# 高階函數(shù)定義:
# 1.函數(shù)接收的參數(shù)是一個(gè)函數(shù)名
# 2.函數(shù)的返回值是一個(gè)函數(shù)名
# 3.滿(mǎn)足上述條件任意一個(gè),都可稱(chēng)之為高階函數(shù)
#把函數(shù)當(dāng)做參數(shù)傳給高階函數(shù):
# def foo():
# print("我的函數(shù)名是做為一個(gè)高階函數(shù)傳給其它的函數(shù)的")
# def fc1(fucn):
# print("我是函數(shù)fc1,接受函數(shù)%s傳過(guò)來(lái)的值" %fucn)
# fucn()
# def fc2(fucn):
# print("我是函數(shù)fc2,函數(shù)返回值是%s" %fucn)
# return fucn
# fc1(foo)
# fc2(foo)
# import time
# def foo():
# time.sleep(0.2)
# print("參數(shù)來(lái)自foo")
# def fc1(fucn):
# ks_time=time.time()
# fucn()
# js_time=time.time()
# print("函數(shù)%s運(yùn)行的時(shí)間是%s" %(fucn,js_time-ks_time))
# fc1(foo)
# import time
# def foo():
# print('from the foo')
#
# def timmer(func):
# start_time=time.time()
# return func
# stop_time=time.time()
# print('函數(shù)%s 運(yùn)行時(shí)間是%s' %(func,stop_time-start_time))
# foo=timmer(foo)
# foo()
# 高階函數(shù)總結(jié)
# 1.函數(shù)接收的參數(shù)是一個(gè)函數(shù)名
# 作用:在不修改函數(shù)源代碼的前提下,為函數(shù)添加新功能,
# 不足:會(huì)改變函數(shù)的調(diào)用方式
# 2.函數(shù)的返回值是一個(gè)函數(shù)名
# 作用:不修改函數(shù)的調(diào)用方式
# 不足:不能添加新功能
# 函數(shù)嵌套的例子:
# def father(name):
# print('from father %s' %name)
# def son():
# print('from son')
# def grandson():
# print('from grandson')
# grandson()
# son()
# print(father('xfz'))
#一層套一層的最里面的函數(shù)形成的就是一個(gè)閉包。
# 3.裝飾器的框架
# import time
# def zsq(func):
# def gongnenghanshu():
# ks_time=time.time()
# func()
# js_time=time.time()
# print("函數(shù)運(yùn)行的時(shí)間是:%s" %(js_time-ks_time))
# return gongnenghanshu
# # 例子:
# @zsq
# def foo():
# time.sleep(3)
# print("運(yùn)行了函數(shù)foo")
# res=zsq(foo) #這是間接方式實(shí)現(xiàn)的裝飾,但是更改了函數(shù)的調(diào)用方式.@語(yǔ)法甜糖,加到要調(diào)用裝飾器的前面
# res()
# foo()
#4.加返回值的方法 例2
import time
def zsq(func):
def gongnenghanshu():
ks_time=time.time()
res=func()
js_time=time.time()
print("函數(shù)運(yùn)行的時(shí)間是:%s" %(js_time-ks_time))
return res
return gongnenghanshu
# 例子:
@zsq
def foo():
time.sleep(1)
print("運(yùn)行了函數(shù)foo")
return "我是要添加的函數(shù)返回值"
z=foo()
print(z)
轉(zhuǎn)載于:https://www.cnblogs.com/Centwei/p/10466385.html
總結(jié)
- 上一篇: mysql 昨天日期_MySQL 日期函
- 下一篇: c mysql 查不到数据_怎么检测不