MST

星途 面试题库

面试题:Python装饰器中return关键字对被装饰函数返回值的处理

编写一个装饰器函数,该装饰器能够捕获被装饰函数的返回值,并对返回值进行加密处理(假设简单加密是将字符串每个字符的ASCII码加1)后返回。详细说明在装饰器函数中return关键字是如何正确处理并传递被装饰函数的返回值,以及可能遇到的返回值类型相关的问题及解决方法。
34.0万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试
def encrypt_decorator(func):
    def wrapper(*args, **kwargs):
        result = func(*args, **kwargs)
        if isinstance(result, str):
            encrypted_result = ''.join(chr(ord(char) + 1) for char in result)
            return encrypted_result
        else:
            raise ValueError("被装饰函数返回值必须是字符串")
    return wrapper


@encrypt_decorator
def example_function():
    return "hello"


print(example_function())

return关键字在装饰器中的处理

  1. 捕获返回值:在内部包装函数wrapper中,通过result = func(*args, **kwargs)调用被装饰函数并捕获其返回值。
  2. 处理并返回:对捕获到的返回值result进行加密处理,加密后通过return encrypted_result返回加密后的结果。

返回值类型相关问题及解决方法

  1. 问题:如果被装饰函数返回的不是字符串类型,直接进行加密处理会导致错误。
  2. 解决方法:在装饰器内部使用isinstance判断返回值类型,如果不是字符串类型,抛出ValueError提示返回值必须是字符串。这样可以确保只有在返回值类型正确时才进行加密操作。