为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用装饰器引入功能和参数?

如何使用装饰器引入功能和参数?

繁星点点滴滴 2022-09-06 15:40:38
我有一段代码,如下所示:def range_print(n, *args):    for i in range(n):        func(i)@range_print(n=10)def func(i):    print(i)我得到:TypeError                                 Traceback (most recent call last)<ipython-input-4-b13e44263521> in <module>      2     for i in range(n):      3         func(i)----> 4 @range_print(n=10)      5 def func(i):      6     print(i)<ipython-input-4-b13e44263521> in range_print(n, *args)      1 def range_print(n, *args):      2     for i in range(n):----> 3         func(i)      4 @range_print(n=10)      5 def func(i):TypeError: 'NoneType' object is not callable后来我解决了这个问题,但我不知道有没有更好的方法?我想使用装饰器使我的代码看起来更干净。def range_print(n, *args):    def inner(func): # <----Why do I need this def to load func?        for i in range(n):            func(i)    return inner@range_print(n=10)def func(i):    print(i)
查看完整描述

1 回答

?
GCT1015

TA贡献1827条经验 获得超4个赞

该函数将函数作为参数的原因是,当您向函数添加类似装饰器时,这就是Python的机制的工作方式。inner@range_print(n=10)

调用函数时,Python 会将函数本身及其参数传递给装饰器。range_print

因此,在您的情况下,函数签名中指定的参数实际上是一个函数。nrange_print


查看完整回答
反对 回复 2022-09-06
  • 1 回答
  • 0 关注
  • 75 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信