装饰器大家都知道是python常用的技巧,那如果我想给装饰器也传入参数呢?
其实就是再写一个装饰器在外层即可!
import threading
from functools import wraps
def outer_func(name, sex):
def decorator(fn):
@wraps(fn)
def wrapper(*args, **kwargs):
print(f'{name} 性别为 {sex}')
return fn(*args, **kwargs)
return wrapper
return decorator
@outer_func('小蓝', '男')
def func(name, age):
print(f'{name} 年龄为 {age}')
def print_func():
print(func.__name__)
def main():
func_thread = threading.Thread(target=func, args=('小黄', 19))
print_thread = threading.Thread(target=print_func)
thread_list = [func_thread, print_thread]
for thread in thread_list:
thread.start()
for thread in thread_list:
thread.join()
print('主线程结束!')
if __name__ == '__main__':
main()
大家还可以看到,我用了线程去执行,然后还添加了一个工具函数,让本身被装饰的函数的 name 不会被修改! |