Python装饰器报错

问题遇到的现象和发生背景

在学习装饰器的时候遇到了无法被调用的报错

问题相关代码,请勿粘贴截图
def yys2(fun):
    def yys3(n):
        a=[]
        for i in range(n):
            a.append(i)
        fun()
        return yys3()

@yys2
def yys1():
    print('.21')

yys1()

运行结果及报错内容

img

我的解答思路和尝试过的方法

装饰器中定义了一个列表与循环,但是在进行参数传入的时候发生了这个报错,请问是什么问题呢?

我想要达到的结果

装饰器能将功能传递给函数

两个错误:
1、注意return yys3 前面和def对齐
2、yys1需要参数,要不然yys3得参数哪里来

def yys2(fun):
    def yys3(n):
        a=[]
        for i in range(n):
            a.append(i)
        fun()
    return yys3
 
@yys2
def yys1():
    print('.21')
 
yys1(3)

看看这个:

def yys2(fun):
    def yys3(n):
        a=[]
        for i in range(n):
            a.append(i)
        fun()
        return a 
    return yys3

@yys2
def yys1():
    print('.21')

r = yys1(4)

print(r)

这篇文章:python装饰器详解 也许能够解决你的问题,你可以看下