[英]What functions cannot be decorated in Python?
在大学考试或面试问题设置中,您如何回答:
哪些函数不能在 Python 中修饰?
展示知识深度是有益的,因此我将首先简要描述 Python 中装饰器的使用。 它们的局限性是什么?
我已经阅读了Decorator 模式 Wiki ,但找不到任何反模式。
@functools.lru_cache(maxsize=128)
def fibonacci(n=10):
...
类还可以充当装饰器(如果您实现了__init__()
和__call__()
方法)。
可以包装装饰器以允许传递参数。 它也可以与其他装饰器链接。
您不能将装饰器用于变量赋值、调用函数等。它们仅在定义函数/类/方法时使用。
您可能不想在递归函数上使用装饰器,因为它有效地将最大递归深度减半(如@jasonharper 所建议的)。
还有其他情况下不能(或不应该)使用装饰器吗?
也许我弄错了,但是如果您没有使用装饰器的语法糖(“@my_decorator”),那么它是通过将装饰函数分配给您想要装饰的函数来使用的。 所以从技术上讲,装饰器可以用于赋值,不仅可以用于函数定义,还可以用于将函数赋值给另一个函数:
# let's create a simple decorator
def mydecorator(decorated_func):
def wrapped(*args, **kwargs):
print("Something happened in decorator!")
return decorated_func(*args, **kwargs)
return wrapped
# let's use decorator with syntactic sugar "@"
@mydecorator
def myfunc(myarg):
print("my function", myarg)
# just simple function
def mysecond_func(myarg):
print("my second function", myarg)
# let's decorate the second function with the same decorator,
# but without using syntactic sugar;
# it's identical with the first example with "@"
mysecond_func = mydecorator(mysecond_func)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.