装饰器的参数并不直接支持正则表达式。但是我们可以通过在装饰器中使用函数,来实现对参数值的正则匹配。
以下是一个示例:
import re
def validate_input(regex):
def decorator(func):
def wrapper(input_str):
if not re.match(regex, input_str):
print("Invalid input")
return
func(input_str)
return wrapper
return decorator
在这个例子中,我们定义了一个 validate_input 装饰器函数,它接受一个正则表达式作为参数,并返回一个装饰器函数 decorator。decorator 函数接受原始函数作为参数,并返回一个新的函数 wrapper。在 wrapper 函数内部,我们首先使用正则表达式检查输入字符串是否符合要求,如果不符合要求,则打印出一条错误信息并退出函数。否则,我们调用原始函数并传递输入字符串作为参数。
使用这个装饰器,例如:
@validate_input(r'\d+')
def process_input(input_str):
print("Input is valid:", input_str)
process_input("123") # 输出 "Input is valid: 123"
process_input("abc") # 输出 "Invalid input"
在这个示例中,我们将 validate_input 装饰器应用到 process_input 函数上,并传递一个正则表达式 \d+ 作为参数。当我们调用 process_input 函数时,装饰器会先检查输入字符串是否全部由数字组成,如果符合要求,则调用原始函数并打印出一条消息。如果不符合要求,则打印出一条错误信息。