python裝飾器的簡單實用

2022-07-06 16:27:14 字數 2325 閱讀 2024

裝飾器(decorators)可以實現在不變原有python **功能的基礎上增加功能**。

框架

def outer2(func):

def inner(*args, **kwargs):

func(*args, **kwargs)

return inner

@outer2

def foo(a, b, c):

print (a+b+c)

示例一:

import time

from functools import wraps

def time_checker(func):

@wraps(func)

def inner(*args, **kwargs):

time_start = time.time()

ret = func(*args, **kwargs)

print(f' running time is 秒')

return ret

return inner

@time_checker

def func1():

time.sleep(1)

print(f'now func1 is running')

if __name__ == '__main__':

func1()

示例二:

from functools import wraps

def logit(logfile='out.log'):

def logging_decorator(func):

@wraps(func)

log_string = func.__name__ + ' was called'

print(log_string)

with open(logfile, 'a') as opend_files:

opend_files.write(log_string + '\n')

return func(*args, **kwargs)

return logging_decorator

@logit

def myfunc1():

pass

示例三

def outer_arg(bar):

def outer(func):

def inner(*args, **kwargs):

ret = func(*args, **kwargs)

print(bar)

return ret

return inner

return outer

# 相當於 outer_arg('foo_arg')(foo)()

@outer_arg('foo_arg')

def foo(a, b, c):

return (a+b+c)

print(foo(1,3,5))

示例四

class count(object):

def __init__(self, func):

self._func = func

self.num_calls = 0

def __call__(self, *args, **kwargs): # 模擬成函式,將類模擬成可呼叫的物件

self.num_calls += 1

print(f'num of call is ')

@count

def example():

print('hello')

示例五

def decorator(aclass):

class newclass(object):

def __init__(self, args):

self.times = 0

def display(self):

# 將runtime()替換為display()

self.times += 1

print('run times ', self.times)

return newclass

@decorator

class myclass(object):

def __init__(self, number):

self.number = number

# 重寫display

def display(self):

print('number is', self.number)

six = myclass(6)

for i in range(5):

six.display()

關於python的裝飾器簡單實用

python呼叫函式可以提供 key value 代表這個引數的值,我們可以不用根據函式定義順序來呼叫函式。a,b 可以作為裝飾器提供不定引數。使裝飾器和被裝飾函式 耦合度大幅度降低 函式 def func return 1 返回 函式的名字 func.name 通過裝飾器實現類的靜態方法 clas...

python簡單裝飾器 python裝飾器簡單使用

理解裝飾前先理解python閉包的概念 下面是對裝飾器的簡單舉例 實質 是乙個函式 引數 是你要裝飾的函式名 並非函式呼叫 返回 是裝飾完的函式名 inner 作用 為已經存在的物件新增額外的功能 特點 不需要對物件做任何的 上的變動 被裝飾的函式無引數 def decorate func 裝飾器列...

python 簡單的裝飾器

今天我們講一講python中的裝飾器。可能初次接觸裝飾器的同學會覺得它很難,其實也就那麼一回事兒,今天就讓我們會會它!首先它的本質是函式,它的功能是為其他函式新增附加功能。ps 它有兩個原則 1.不能修改被修飾的函式的 2.不能更改被修飾函式的呼叫函式。我所認為的裝飾器其實就是 裝飾器 高階函式 函...