2024-09-30 14:27:34 发布
网友
有人能彻底解释一下以下代码的最后一行:
def myMethod(self): # do something myMethod = transformMethod(myMethod)
为什么要通过另一个方法传递方法的定义?那又如何呢?提前谢谢!在
您描述的是一个decorator,一种方法/函数修改的形式,使用decorators的特殊语法可以更容易地完成。在
你所描述的相当于
@transformMethod def myMethod(self): # do something
decorator的用法非常广泛,例如以@staticmethod、@classmethod、@functools.wraps()、@contextlib.contextmanager等形式,等等
@staticmethod
@classmethod
@functools.wraps()
@contextlib.contextmanager
由于特定的Python版本(我认为是2.6),类也可以被修饰。在
这两种decorator都允许返回甚至不是函数或类的对象。例如,您可以用一种方式来修饰生成器函数,将其转换为dict、set或其他任何东西。在
我在这里做什么?在
我创建了一个函数,它接受一个“要应用的东西”,然后返回另一个函数。在
这个“内部”函数接受要修饰的函数,调用它并将其结果放入外部函数并返回此结果。在
f()返回生成器对象,然后将其放入dict()或{}。在
f()
dict()
Why would you want to pass the definition for a method through another method?
因为你想修改它的行为。在
And how would that even work?
很好,因为函数在Python中是一流的。在
def decorator(f): def wrapper(*args, **kwargs): print 'Before!' res = f(*args, **kwargs) print 'After!' return res return wrapper def somemethod(): print 'During...' somemethod = decorator(somemethod) somemethod()
这是函数包装的一个例子,当你有一个函数接受一个函数作为参数,并返回一个新函数来修改原始函数的行为。在
下面是一个如何使用的示例,这是一个简单的包装器,它只在每次调用时打印“Enter”和“Exit”:
def wrapper(func): def wrapped(): print 'Enter' result = func() print 'Exit' return result return wrapped
下面是一个如何使用的示例:
为了方便起见,Python提供了decorator syntax,它只是函数包装的一个速记版本,它在函数定义时执行相同的操作,下面是如何使用它:
>>> @wrapper ... def say_hello(): ... print 'Hello' ... >>> say_hello() Enter Hello Exit
您描述的是一个decorator,一种方法/函数修改的形式,使用decorators的特殊语法可以更容易地完成。在
你所描述的相当于
decorator的用法非常广泛,例如以
@staticmethod
、@classmethod
、@functools.wraps()
、@contextlib.contextmanager
等形式,等等由于特定的Python版本(我认为是2.6),类也可以被修饰。在
这两种decorator都允许返回甚至不是函数或类的对象。例如,您可以用一种方式来修饰生成器函数,将其转换为dict、set或其他任何东西。在
^{pr2}$我在这里做什么?在
我创建了一个函数,它接受一个“要应用的东西”,然后返回另一个函数。在
这个“内部”函数接受要修饰的函数,调用它并将其结果放入外部函数并返回此结果。在
f()
返回生成器对象,然后将其放入dict()
或{因为你想修改它的行为。在
很好,因为函数在Python中是一流的。在
这是函数包装的一个例子,当你有一个函数接受一个函数作为参数,并返回一个新函数来修改原始函数的行为。在
下面是一个如何使用的示例,这是一个简单的包装器,它只在每次调用时打印“Enter”和“Exit”:
下面是一个如何使用的示例:
^{pr2}$为了方便起见,Python提供了decorator syntax,它只是函数包装的一个速记版本,它在函数定义时执行相同的操作,下面是如何使用它:
相关问题 更多 >
编程相关推荐