裝飾器是Python語言中一種特殊的語法,用于在不修改原函數代碼的情況下,為函數添加額外的功能或修改函數的行為。通過裝飾器,我們可以在函數執行前后執行一些額外的代碼,或者修改函數的參數。
要使用裝飾器引入函數和參數,可以按照以下步驟進行:
- 定義裝飾器函數:裝飾器函數是一個普通的Python函數,它接受一個函數作為參數,并返回一個新的函數。裝飾器函數通常使用
@
符號放在被裝飾函數的定義之前,表示該函數將被裝飾。 - 在裝飾器函數內部定義新的函數:在裝飾器函數內部,可以定義一個新的函數,用于包裹原函數,并在包裹函數中添加額外的功能。
- 在包裹函數中調用原函數:在包裹函數中,可以調用原函數,并傳遞原函數的參數。
- 返回包裹函數:在包裹函數的最后,需要返回包裹函數本身。
?
全局定義參數傳參
def decorator_function(names):def inner_wrapper(func):def wrapper():result = func()return result + f"""my class student's name is {"、".join(names)};"""return wrapperreturn inner_wrappernames = ["Mike", "David", "Jhon"] @decorator_function(names) def generate_code():return f" I'm a teacher! "result_str = generate_code() print(result_str)
不帶參數,這里的names為全局參數
def subnormal_saturation_decorator(func):def wrapper(*args, **kwargs):result = func(*args, **kwargs)return result + f"""my class student's name is {"、".join(names)};"""return wrappernames = ["Mike", "David", "Jhon"]
@subnormal_saturation_decorator
def generate_code():return f" I'm a teacher!"result_str = generate_code()
print(result_str)
通過方法傳參
def subnormal_saturation_decorator(func):def wrapper(names,*args, **kwargs):result = func(names,*args, **kwargs)return result + f"""my class student's name is {"、".join(names)};"""return wrapper@subnormal_saturation_decorator
def generate_code(names):print(names)return f" I'm a teacher!"result_str = generate_code(["Mike", "David", "Jhon"])
print(result_str)
調用使用裝飾器的方法,帶傳參?
# 裝飾器
def subnormal_saturation_decorator(func):def wrapper(names,*args, **kwargs):result = func(names,*args, **kwargs)return result + f"""my class student's name is {"、".join(names)};"""return wrapper# 使用裝飾器的方法
@subnormal_saturation_decorator
def generate_code(names):print(names)return f" I'm a teacher!"# 調用使用裝飾器方法的方法
def supper_func():names = ["Mike", "David", "Jhon"]return generate_code(names)result_str = supper_func()
print(result_str)
?
?
?