Python之裝飾器與開發原則 開放封閉原則

2021-09-11 06:43:18 字數 3363 閱讀 7086

一.裝飾器:(本質上是乙個閉包)

作用:(給乙個現有的函式擴充套件功能)

import time

import random

def sourcefunc():

print("原始函式開始...")

time.sleep(random.random())

print("原始函式結束...")

# 給原始函式擴充套件功能

# def expendfunc():

#     print("原始函式前擴充套件的功能...")

#     sourcefunc()

#     print("原始函式後擴充套件的功能...")

## expendfunc()

# 讓expendfunc函式使用於多個函式

# def expendfunc(fun):

#     print("原始函式前擴充套件的功能...")

#     fun()

#     print("原始函式後擴充套件的功能...")

## expendfunc(sourcefunc)

# 給原始函式增加功能,但不改變原始函式的呼叫方式

# def rewritesource(fun):

#     def expendfunc():

#         print("原始函式前擴充套件的功能...")

#         fun()

#         print("原始函式後擴充套件的功能...")

#     return expendfunc

## sourcefunc = rewritesource(sourcefunc)

# sourcefunc()

#------------以上即是裝飾器的形成過程------------------------

# def rewritesource(fun):

#     def expendfunc():

#         print("原始函式前擴充套件的功能...")

#         fun()

#         print("原始函式後擴充套件的功能...")

#     return expendfunc

## @rewritesource   # 語法糖:替代sourcefunc = rewritesource(sourcefunc)

# def sourcefunc():

#     print("原始函式開始...")

#     time.sleep(random.random())

#     print("原始函式結束...")

## sourcefunc()

# 如果sourcefunc函式帶返回值,裝飾器如何獲取

# def rewritesource(fun):

#     def expendfunc():

#         print("原始函式前擴充套件的功能...")

#         ret = fun()

#         print("原始函式後擴充套件的功能...")

#         return ret

#     return expendfunc

## @rewritesource   # 語法糖:替代sourcefunc = rewritesource(sourcefunc)

# def sourcefunc():

#     print("原始函式開始...")

#     time.sleep(random.random())

#     print("原始函式結束...")

#     return "原始函式的返回值"

# res = sourcefunc()

# print(res)

# 如果原始函式還帶有乙個引數,裝飾器該如何傳入

# def rewritesource(fun):

#     def expendfunc(arg):

#         print("原始函式前擴充套件的功能...")

#         ret = fun(arg)

#         print("原始函式後擴充套件的功能...")

#         return ret

#     return expendfunc

## @rewritesource   # 語法糖:替代sourcefunc = rewritesource(sourcefunc)

# def sourcefunc(arg):

#     print("原始函式開始...")

#     time.sleep(random.random())

#     print("這是原始函式的引數:{}".format(arg))

#     print("原始函式結束...")

#     return "原始函式的返回值"

# res = sourcefunc('我就是傳入的引數')

# print(res)

# 原始函式帶任意數引數

# def rewritesource(fun):

#     def expendfunc(*args,**kwargs):

#         print("原始函式前擴充套件的功能...")

#         ret = fun(*args,**kwargs)

#         print("原始函式後擴充套件的功能...")

#         return ret

#     return expendfunc

## @rewritesource   # 語法糖:替代sourcefunc = rewritesource(sourcefunc)

# def sourcefunc(*args,**kwargs):

#     print("原始函式開始...")

#     time.sleep(random.random())

#     print("這是原始函式的引數組--args:{};kwargs:{}".format(args,kwargs))

#     print("原始函式結束...")

#     return "原始函式的返回值"

# res = sourcefunc('位置1','位置2','位置3',name='張三',age=18,job='teacher')

# print(res)

二.開發原則:(開放封閉原則)

開放:對擴充套件是開放的

**功能越多越強大,擴充套件**段的功能是不變的追求

封閉:對修改時封閉的

**可能在多個地方被呼叫,一但原**被修改,每個被呼叫的

地方均受到影響,牽一髮而動全身,影響範圍不可控制

python裝飾器介紹 Python之裝飾器簡介

python函式式程式設計之裝飾器 1.開放封閉原則 簡單來說,就是對擴充套件開放,對修改封閉。在物件導向的程式設計方式中,經常會定義各種函式。乙個函式的使用分為定義階段和使用階段,乙個函式定義完成以後,可能會在很多位置被呼叫。這意味著如果函式的定義階段 被修改,受到影響的地方就會有很多,此時很容易...

python 找到裝飾器 Python之裝飾器

裝飾器本質上就是乙個python函式,他可以讓其他函式在不需要做任何 變動的前提下,增加額外的功能,裝飾器的返回值也是乙個函式物件。裝飾器的作用 在不改變原函式及原函式的執行的情況下,為原函式增加一些額外的功能,比如列印日誌 執行時間,登入認證等等。乙個簡單的裝飾器 import time def ...

Python之裝飾器

裝飾器就是乙個以函式作為引數並返回乙個替換函式的可執行函式 即裝飾器是乙個函式,其引數為函式,返回值也為函式 可理解為對函式的功能進行拓展,所以叫裝飾 outer為裝飾器,效果為給被裝飾函式返回值結果加負號 defouter fun definner x return fun x return in...