锁定函数的装饰函数?

2024-10-01 07:36:50 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有两个函数,它们都调用一个decorator函数,该函数以两个方法作为参数:

def decorator(connector, disconnector):
def decorator(function):
    def decorated_function(*args, **kwargs):
        print("connecting")
        connector(args[0])
        result = function(*args, **kwargs)
        print("disconnecting")
        # only want this to be called when function() is completely done
        disconnector(args[0])
        return result
    return decorated_function
return decorator

@decorator(connector, disconnector)
def func1():
   func2()
   print "func2 done"

@decorator(connector, disconnector)
def func2():
   print "hello world"

调用func1()时,是否有方法防止在func1()完全执行完毕之前调用装饰器中的隔离开关方法?在这种情况下,我不希望对装饰器的func2()调用执行连接/断开连接


Tags: 方法函数connectorreturndefargsfunctiondecorator
1条回答
网友
1楼 · 发布于 2024-10-01 07:36:50

如果您希望在断开连接之前完全完成func1,请执行以下操作:

def connector(*args):
    print("connect done", args[0])
def disconnector(*args):
    print("disconnect done", args[0])


def decorator(connector, disconnector):
    def decorator(function):
        def decorated_function(*args, **kwargs):
            print("connecting")
            connector(args[0])
            result = function(*args, **kwargs)
            print("disconnecting")
            # only want this to be called when function() is completely done
            disconnector(args[0])
            return result
        return decorated_function
    return decorator

@decorator(connector, disconnector)
def func1(a):
   func2()
   print("func2 done")

def func2():
   print("hello world")

func1(10)

输出:

connecting
connect done 10
hello world
func2 done
disconnecting
disconnect done 10

注意:上面的代码是用python3编写的。在您的情况下,只需更新代码中的print语句(删除括号)

由于您正在将参数传递给connector(args[0]),请将参数传递给func1()。我传递了一个伪整数=10

相关问题 更多 >