如何在 Python 装饰器中使用 __func = None

阵风

我有以下装饰器(根据https://realpython.com/primer-on-python-decorators/#decorators-with-arguments):

def slow_down(_func=None, rate = 1):

    def decorator(func):

        print(_func) # Added for understanding? 

        @functools.wraps(func)
        def wrapper(*args, **kwargs):
            time.sleep(rate)
            return func(*args, **kwargs)
        return wrapper    


    if _func==None:
        return decorator

    else: return decorator(_func) 

我的问题是,这个slow_down函数不应该用初始化_func = None吗?但是,当我用装饰器创建一个函数时,我得到了一个初始化的 _func 值:

@slow_down
def countdown(time = 5):
    print(time)
    if time == 0: pass
    else: countdown(time-1)
<function countdown at 0x7f1aa0a8da60>

但是当我初始化函数的值时,我得到None

@slow_down(rate=2)
def countdown(time = 5):
    print(time)
    if time == 0: pass
    else: countdown(time-1)

None

不应该反过来吗?

尼古拉

当您为装饰器使用裸名称时(如在@slow_down 中),它会以被装饰为参数的函数被调用。当涉及括号时(如第二种情况),装饰器被调用,并期望返回另一个函数,该函数被调用,该函数被装饰为参数。您的特定装饰器中的 if 允许它以任何一种方式工作。– 杰森哈珀

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在 Python 中使用带有协程的装饰器?

来自分类Dev

如何在python中使用abstractproperty装饰器强制子类设置属性?

来自分类Dev

属性装饰器如何在python中使用语法糖(@)在内部工作?

来自分类Dev

如何在解析器中替换或删除None(python)

来自分类Dev

如何在Python Pivot_table中使用agg_func ='All'

来自分类Dev

在Python中使用None

来自分类Dev

如何在Python中使用一些None值生成随机数列表?

来自分类Dev

如何在Python中使用“ is None”编写单行三元表达式?

来自分类Dev

在Python Slack API中使用装饰器

来自分类Dev

在python @patch装饰器中使用self

来自分类Dev

在python的类中使用装饰器

来自分类Dev

如何使用带参数的python装饰器?

来自分类Dev

如何在Python中理解None,[],[1]?

来自分类Dev

如何在Qooxdoo的装饰器中使用Mixin?

来自分类Dev

如何在rails4中使用装饰器?

来自分类Dev

如何在子类中使用描述符的装饰器

来自分类Dev

如何在STANDARD SQL中使用装饰器

来自分类Dev

如何在Python中配置装饰器

来自分类Dev

PHP Lithium框架-如何在模型中使用xSQL FUNC

来自分类Dev

PHP Laravel-如何在模型中使用xSQL FUNC?

来自分类Dev

转到:如何在go中使用func()bool参数?

来自分类Dev

如何在提供IQueryable输出的linq查询中使用Func

来自分类Dev

如何在 Linq 中使用 func to Entity select?

来自分类Dev

如何在Python中使用Selenium从具有“ display:none”属性的Web元素中选择任何元素

来自分类Python

我如何在Python中使用相同的装饰在一个以上的功能?

来自分类Dev

PL/Python。如何在 where clouse 处为整数使用 None 类型?

来自分类Dev

如何在 Python 中将 rsplit 与 None 值一起使用?

来自分类Dev

如何在python 3中正确使用@property装饰器?

来自分类Dev

在python中使用属性装饰器期间在init中赋值

Related 相关文章

  1. 1

    如何在 Python 中使用带有协程的装饰器?

  2. 2

    如何在python中使用abstractproperty装饰器强制子类设置属性?

  3. 3

    属性装饰器如何在python中使用语法糖(@)在内部工作?

  4. 4

    如何在解析器中替换或删除None(python)

  5. 5

    如何在Python Pivot_table中使用agg_func ='All'

  6. 6

    在Python中使用None

  7. 7

    如何在Python中使用一些None值生成随机数列表?

  8. 8

    如何在Python中使用“ is None”编写单行三元表达式?

  9. 9

    在Python Slack API中使用装饰器

  10. 10

    在python @patch装饰器中使用self

  11. 11

    在python的类中使用装饰器

  12. 12

    如何使用带参数的python装饰器?

  13. 13

    如何在Python中理解None,[],[1]?

  14. 14

    如何在Qooxdoo的装饰器中使用Mixin?

  15. 15

    如何在rails4中使用装饰器?

  16. 16

    如何在子类中使用描述符的装饰器

  17. 17

    如何在STANDARD SQL中使用装饰器

  18. 18

    如何在Python中配置装饰器

  19. 19

    PHP Lithium框架-如何在模型中使用xSQL FUNC

  20. 20

    PHP Laravel-如何在模型中使用xSQL FUNC?

  21. 21

    转到:如何在go中使用func()bool参数?

  22. 22

    如何在提供IQueryable输出的linq查询中使用Func

  23. 23

    如何在 Linq 中使用 func to Entity select?

  24. 24

    如何在Python中使用Selenium从具有“ display:none”属性的Web元素中选择任何元素

  25. 25

    我如何在Python中使用相同的装饰在一个以上的功能?

  26. 26

    PL/Python。如何在 where clouse 处为整数使用 None 类型?

  27. 27

    如何在 Python 中将 rsplit 与 None 值一起使用?

  28. 28

    如何在python 3中正确使用@property装饰器?

  29. 29

    在python中使用属性装饰器期间在init中赋值

热门标签

归档