📜  Python中的调度装饰器

📅  最后修改于: 2022-05-13 01:55:10.010000             🧑  作者: Mango

Python中的调度装饰器

装饰器是Python中一个非常强大和有用的工具,因为它允许程序员修改函数或类的行为。装饰器允许我们包装另一个函数以扩展被包装函数的行为,而无需永久修改它。

例子:

# defining a decorator 
def hello_decorator(func): 
    
    # inner1 is a Wrapper function in  
    # which the argument is called 
        
    # inner function can access the outer local 
    # functions like in this case "func" 
    def inner1(): 
        print("Hello, this is before function execution") 
    
        # calling the actual function now 
        # inside the wrapper function. 
        func() 
    
        print("This is after function execution") 
            
    return inner1 
    
    
# defining a function, to be called inside wrapper 
def function_to_be_used(): 
    print("This is inside the function !!") 
    
    
# passing 'function_to_be_used' inside the 
# decorator to control its behavior 
function_to_be_used = hello_decorator(function_to_be_used) 
    
    
# calling the function 
function_to_be_used() 

输出:

Hello, this is before function execution
This is inside the function !!
This is after function execution

调度装饰师

Dispatch 装饰器用于根据签名或类型列表在同一抽象方法的不同实现之间进行选择。

例子:

# Python program to demonstrate
# dispatch decorator
  
from multipledispatch import dispatch
  
  
@dispatch(int)
def func(x):
    return x * 2
  
@dispatch(float)
def func(x):
    return x / 2
  
# Driver code
print(func(2))
print(func(2.0))

输出:

4
1.0

在上面的示例中, @dispatch(int)语句建议创建 Dispatcher 'func',然后将 'int' 类型分配为 key,并将 dispatcher 'func' 作为 value,并将其分配给命名空间中的第 i 个索引(字典)。

现在大家一定想知道什么是命名空间?别担心,让我们看一下命名空间。

命名空间

命名空间只不过是调度装饰器使用的字典。 dispatch 装饰器创建一个带有函数名的 dispatcher 对象,并将这个对象存储为一个键值对。该字典用于将上面示例中的func之类的函数映射到Disptacher('func')类的调度程序对象。

默认情况下,使用的命名空间是multipledispatch.core.global_namespace中的全局命名空间。为了增加安全性,可以使用字典建立自己的名称空间。

例子:

from multipledispatch import dispatch
  
  
nsp = {}
  
@dispatch(int, namespace = nsp)
def func(x):
    return x * 2
  
@dispatch(float, namespace = nsp)
def func(x):
    return x / 2
  
# Driver code
print(func(2))
print(func(2.0))
print(nsp)

输出:

4
1.0
{'func': }