python写一个装饰器,效果是将所有使用这个装饰器的函数名加到一个list中,运行代码显示结果,加详细解析
时间: 2024-02-15 08:04:02 浏览: 18
好的,下面是实现该装饰器的代码:
```python
def collect_func_name(func_list):
def decorator(func):
func_list.append(func.__name__)
return func
return decorator
```
这个装饰器的作用是将使用了该装饰器的函数名添加到一个列表中。其中,`func_list`是要添加函数名的列表,`decorator`是一个装饰器函数,它接收一个函数作为参数,并将该函数的名称添加到`func_list`中。
下面是使用该装饰器的示例代码:
```python
my_func_list = []
@collect_func_name(my_func_list)
def func1():
pass
@collect_func_name(my_func_list)
def func2():
pass
print(my_func_list) # 输出 ['func1', 'func2']
```
在这个示例中,我们定义了两个使用了`collect_func_name`装饰器的函数`func1`和`func2`,并将一个空列表`my_func_list`作为参数传递给了`collect_func_name`函数。最后,我们打印了`my_func_list`,可以看到它包含了`func1`和`func2`的函数名。
需要注意的是,当我们使用`@collect_func_name(my_func_list)`这种方式来装饰函数时,实际上是将该函数传递给了`decorator`函数,然后将返回的函数替换了原来的函数。因此,在定义被装饰的函数时,需要在函数名上方加上`@collect_func_name(my_func_list)`这个装饰器,以便让装饰器能够正确地捕获函数名。