python學習篇之 簡易裝飾器

2022-10-09 20:06:14 字數 2106 閱讀 7922

一、裝飾器簡介

1、什麼是裝飾器

裝飾器本質就是函式,為其他函式新增附加功能

2、原則:

(1)、不修改被修飾函式的源**

(2)、不修改被修飾函式的呼叫方式

開放封閉原則,程式上線後,就不應該更改內部源**。

3、裝飾器知識儲備

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

高階函式:

(1)、函式接收的引數是乙個函式名

(2)、函式的返回值是乙個函式名

(3)、滿足以上任意乙個條件,都可以稱之為高階函式

函式巢狀:

(1)、函式中呼叫另乙個函式

(2)、函式中巢狀函式

閉包:#閉包的意義:返回的函式物件,不僅僅是乙個函式物件,在該函式外還包裹了一層作用域,這使得,該函式無論在何處呼叫,優先使用自己外層包裹的作用域

#應用領域:延遲計算(原來我們是傳參,現在我們是包起來)

#

練習:嘗試使用高階函式來完成功能

import

time

#第一種

#def foo():

## 原有的函式功能

#time.sleep(2)

#print('from foo~')

#return##

def timer(func):

## 高階函式之引數為函式名

#star_time = time.time()

#func()

#stop_time = time.time()

#print("函式的執行時間為 %s" %(stop_time - star_time) )##

timer(foo) # 這種可以實現,但是更改了函式的執行方式##

第二種#

def foo():

## 原有的函式功能

#time.sleep(2)

#print('from foo~')

#return##

def timer(func):

## 高階函式之引數為函式名and返回值也是函式

#star_time = time.time()

#func()

#stop_time = time.time()

#print("函式的執行時間為 %s" % (stop_time - star_time))

#return func

#foo = timer(foo)# 這種雖然沒有更改呼叫方式,也算是實現了,但是 該功能函式被呼叫了兩次。

#foo()

#練習:嘗試融合使用

#import time

#def timer(func):##

star_time = time.time()

#res = func(*args,**kwargs) # 就是在執行test() 引數怎麼接收的怎麼傳入

#stop_time = time.time()

#print('函式的執行時間是%s '%(stop_time-star_time))

#return res##

#@timer

#def foo():

#time.sleep(2)

#print("來自foo~")##

foo()

## 如果foo 加引數##

def foo(name,age):

#time.sleep(2)

#print("來自foo~")

#print('我是 %s,我的年紀是%d。'%(name,age))

#return##

foo('吳克群',40)

#補充,解壓序列

#1、不使用索引,拿到列表首尾的值 與 去除首尾後的值

#li = [1,2,3,4,5,6,7,8]

#a,*_,c = li # 拿列表的第一位 和最後一位

#print(a,c)

#a,*d,c = li # 拿到去除首尾 中間的值。 *後面只是用於接收引數的變數。

#print(d)

#2、變數交換

#a = 1

#b = 2

#a, b = b, a # 就等於把a的值給b,b的值給a

練習

python簡易裝飾器 python裝飾器簡單理解

裝飾器定義 1 把乙個函式名當作實參傳給另外乙個函式 在不修改裝飾函式源 的情況下為其新增功能 2 返回值中包含函式名 不改變函式呼叫方式 源 1 deff 2 deff 3 time.sleep 2 4 print i am f 5 加基本計算程式執行時間函式 1 deff 2 print i a...

python之裝飾器篇

一.基本裝飾器 基本裝飾器的作用 在不改變原函式的基礎上,通過裝飾器,給原函式新增某些功能 實現方法 在原函式上加 裝飾器名字 其中 叫做語法糖 定義裝飾器 第一層函式傳入引數 用於傳入原函式 第二層使用原函式的同時,加入需要新增的功能 第一層函式要返回第二層函式名 整個函式形成閉包 import ...

python之裝飾器的學習

遇到問題 1 函式帶括號與不帶括號的區別 加括號是執行函式 呼叫的是函式的return結果 不加括號是函式索引 呼叫的是函式本身 2 函式中 args和 kwargs所代表的意義 python函式中 args和 kwargs是用來傳遞變長引數的用法。單星號形式 args 用來傳遞非命名鍵可變引數列表...