pythonの閉パッケージと装飾器
2839 ワード
閉パッケージの定義:
関数を定義し、関数の内部に内部関数を定義し、この関数が外部関数の変数を使用すると、内部関数と使用される変数を閉パッケージと呼びます.
閉パッケージの定義例:
主な役割:
閉パケットはコードの多重性を向上させるが,外部関数を用いた変数により関数が実行後に変数が解放されないため,閉パケットは変数を保存する機能を有し,閉パケットは軽量クラスといえるがメモリの消費も増加する.
装飾器の定義:pythonの文法糖"@"と閉包を利用して既存の関数の機能拡張を実現する.アクセサリーの機能:導入ログ 関数実行時間統計 関数前予備処理 を実行する.関数実行後クリーンアップ機能 権限チェック等シーン キャッシュ 1.0パラメータなし戻り値なしの関数装飾
2.0パラメータなし戻り値のある関数装飾
3.0パラメータ付き戻り値なしの関数装飾
4.0パラメータ付き戻り値付き関数装飾
5.0パラメータ付き装飾品(装飾品工場)
6.0万能装飾器:*argsと*kwargsを追加して余分なパラメータを受信する
7.0類装飾器
関数を定義し、関数の内部に内部関数を定義し、この関数が外部関数の変数を使用すると、内部関数と使用される変数を閉パッケージと呼びます.
閉パッケージの定義例:
#
def decorator(func):
#
def inner():
print(" ")
#
func()
# ,
return inner
主な役割:
閉パケットはコードの多重性を向上させるが,外部関数を用いた変数により関数が実行後に変数が解放されないため,閉パケットは変数を保存する機能を有し,閉パケットは軽量クラスといえるがメモリの消費も増加する.
装飾器の定義:pythonの文法糖"@"と閉包を利用して既存の関数の機能拡張を実現する.アクセサリーの機能:
def decorator(func):
def inner():
print(" ...")
func()
return inner
@decorator
def func():
print(" ...")
func()
2.0パラメータなし戻り値のある関数装飾
def decorator(func):
def inner():
print(" ...")
return func()
return inner
@decorator
def func():
print(" ...")
return " :",True
print(func())
3.0パラメータ付き戻り値なしの関数装飾
def decorator(func):
def inner(num):
print(" ...")
func(num)
return inner
@decorator
def func(num):
print(" ...")
print(" :", num)
func(10)
4.0パラメータ付き戻り値付き関数装飾
def decorator(func):
def inner(num):
print(" ...")
return func(num)
return inner
@decorator
def func(num):
print(" ...")
return " :", num
print(func(10))
5.0パラメータ付き装飾品(装飾品工場)
# ,
def outer(params):
def decorator(func):
def inner(num):
if params is True:
print(" ...")
return func(num)
return inner
return decorator
@outer(True)
def func(num):
print(" ...")
return " :", num
print(func(10))
6.0万能装飾器:*argsと*kwargsを追加して余分なパラメータを受信する
def decorator(func):
def inner(num, *args, **kwargs):
print(" ...")
func(num, *args, **kwargs)
return inner
@decorator
def func(num, *args, **kwargs):
print(" ...")
print(" :", num)
print( " :", args, kwargs)
func(10, 20, a=10, b=20)
7.0類装飾器
class decorator(object):
# init
def __init__(self, func):
self.__func = func
print(" ...")
# , __call__ ,
def __call__(self, *args, **kwargs):
self.__func()
@decorator
def func():
print(" ...")
func()