Python用装饰器对随机数生成函数返回的数组元素逐位平方
错误原因
- 你的
array_creator函数仅执行了打印操作,没有设置返回值,Python中无显式返回值的函数默认返回None,装饰器中拿到的numbers变量实际为None,自然无法执行幂运算 - 即使函数返回了随机数列表,Python列表本身也不支持直接使用
**运算符做整体幂运算,需要遍历列表中的每个元素单独计算平方
修复后的完整代码
import random def square_them(function): def case(*args, **kwargs): numbers = function(*args, **kwargs) # 遍历列表每个元素做平方 return [num ** 2 for num in numbers] return case @square_them def array_creator(): randomlist = [] for i in range(1, 10): numbers = random.randint(1, 100) randomlist.append(numbers) # 将生成的列表返回给装饰器,替换原有的print操作 return randomlist # 调用函数打印结果 print(array_creator())
核心修改说明
- 给
array_creator函数增加return randomlist逻辑,把生成的随机数列表传递给装饰器处理 - 装饰器内层函数中改用列表推导式遍历所有元素做平方计算,返回处理后的新列表
内容的提问来源于stack exchange,提问作者Michal
相关产品推荐
相关产品推荐

