大锤python日记(装饰器的参数支持正则表达式)

92 阅读1分钟

装饰器的参数并不直接支持正则表达式。但是我们可以通过在装饰器中使用函数,来实现对参数值的正则匹配。

以下是一个示例:

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 装饰器函数,它接受一个正则表达式作为参数,并返回一个装饰器函数 decoratordecorator 函数接受原始函数作为参数,并返回一个新的函数 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 函数时,装饰器会先检查输入字符串是否全部由数字组成,如果符合要求,则调用原始函数并打印出一条消息。如果不符合要求,则打印出一条错误信息。