python 裝飾器的基本原理

2021-08-28 04:09:18 字數 1572 閱讀 8513

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

#原則:

# 不修改被修飾函式的源**,不修改被修飾函式的呼叫方式

# import time

# def cal(l):

# start_time=time.time()

# res=0

# for i in l:

# time .sleep(0.1)

# res+=i

# stop_time=time.time()

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

# return res

# print(cal(range(100)))

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

import time

def foo():

time.sleep(0.2)

print('彭亮')

#不修改源** 不修改foo呼叫方式

def timer (func):

start_time=time.time()

func()

stop_time=time.time()

print('執行時間%s'%(stop_time-start_time))

return func

foo=timer(foo)

foo()

#裝飾器本身就是函式

# 裝飾器就是閉包函式的一種應用場景

# 二 什麼是裝飾器

## 裝飾器他人的器具,本身可以是任意可呼叫物件,被裝飾者也可以是任意可呼叫物件。

# 強調裝飾器的原則:1 不修改被裝飾物件的源** 2 不修改被裝飾物件的呼叫方式

# 裝飾器的目標:在遵循1和2的前提下,為被裝飾物件新增上新功能

def deco(obj):

print('**********=',obj)

obj.x=1

obj.y=2

obj.z=3

return obj

### @deco是全域性變數

# @deco # 裝飾器的原理就是 執行了deco 目的是:test=deco(test) deco把test傳入進去同時得到乙個(返回值 傳給func) 再賦給test

# def test():

# print('test函式執行')

# print("+"*20)

# @deco #就是相當於 foo=deco(foo)

# class foo:

# pass

# print(foo.__dict__)

# @ 不僅可以在函式前面加 還可以在類前面加

print("-------------------"*30)

# @deco

def test(): # 一切皆物件 test 也是物件

print('test')

test.x=1

test.y=2

print(test.__dict__)

python 裝飾器基本原理

關於python中裝飾器的定義,我們這裡參考廖雪峰大神的python3教程中的定義 在某個函式 執行期間,在不更改該函式的功能下,動態給該函式新增功能的方式,我們稱之為 裝飾器 從定義中看出,這個裝飾器勢必要在實現中傳入原函式,並在其功能中使原函式功能不受影響。由此我們想到的一種實現裝飾器的方法就是...

mysql的基本原理 Mysql 基本原理

mysql 基本原理 mysql是一種關聯式資料庫管理系統,關聯式資料庫將資料儲存在不同的表中,而不是將所有資料放在乙個大倉庫內,這樣就增加了速度並提高了靈活性 ysql是資料庫登入命令 uroot預設超級使用者登入 p 預設沒密碼 中寫密碼 mysqladmin uroot password 12...

pwm控制的基本原理 PWM控制的基本原理

pwm pulse width modulation 控制 脈衝寬度調製技術,通過對一系列脈衝的寬度進行調製,來等效地獲得所需要波形 含形狀和幅值 pwm控制技術在逆變電路中應用最廣,應用的逆變電路絕大部分是pwm型,pwm控制技術正是有賴於在逆 變電路中的應用,才確定了它在電力電子技術中的重要地位...