#!/user/bin/env python3
# -*-encoding="utf-8"-*-
# 1.裝飾器概念
#裝飾器本身就是函數,為別的函數添加附加功能。把握兩個遵循的條件。
# 1.不修改被修飾的源代碼內容。
# 2.不修改被修飾函數的調用方式。
# 裝飾器=高階函數+函數嵌套+閉包
# 高階函數定義:
# 1.函數接收的參數是一個函數名
# 2.函數的返回值是一個函數名
# 3.滿足上述條件任意一個,都可稱之為高階函數
#把函數當做參數傳給高階函數:
# def foo():
# print("我的函數名是做為一個高階函數傳給其它的函數的")
# def fc1(fucn):
# print("我是函數fc1,接受函數%s傳過來的值" %fucn)
# fucn()
# def fc2(fucn):
# print("我是函數fc2,函數返回值是%s" %fucn)
# return fucn
# fc1(foo)
# fc2(foo)
# import time
# def foo():
# time.sleep(0.2)
# print("參數來自foo")
# def fc1(fucn):
# ks_time=time.time()
# fucn()
# js_time=time.time()
# print("函數%s運行的時間是%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('函數%s 運行時間是%s' %(func,stop_time-start_time))
# foo=timmer(foo)
# foo()
# 高階函數總結
# 1.函數接收的參數是一個函數名
# 作用:在不修改函數源代碼的前提下,為函數添加新功能,
# 不足:會改變函數的調用方式
# 2.函數的返回值是一個函數名
# 作用:不修改函數的調用方式
# 不足:不能添加新功能
# 函數嵌套的例子:
# def father(name):
# print('from father %s' %name)
# def son():
# print('from son')
# def grandson():
# print('from grandson')
# grandson()
# son()
# print(father('xfz'))
#一層套一層的最里面的函數形成的就是一個閉包。
# 3.裝飾器的框架
# import time
# def zsq(func):
# def gongnenghanshu():
# ks_time=time.time()
# func()
# js_time=time.time()
# print("函數運行的時間是:%s" %(js_time-ks_time))
# return gongnenghanshu
# # 例子:
# @zsq
# def foo():
# time.sleep(3)
# print("運行了函數foo")
# res=zsq(foo) #這是間接方式實現的裝飾,但是更改了函數的調用方式.@語法甜糖,加到要調用裝飾器的前面
# res()
# foo()
#4.加返回值的方法 例2
import time
def zsq(func):
def gongnenghanshu():
ks_time=time.time()
res=func()
js_time=time.time()
print("函數運行的時間是:%s" %(js_time-ks_time))
return res
return gongnenghanshu
# 例子:
@zsq
def foo():
time.sleep(1)
print("運行了函數foo")
return "我是要添加的函數返回值"
z=foo()
print(z)
轉載于:https://www.cnblogs.com/Centwei/p/10466385.html