如何让几行函数在python中只执行一次?最好使用lambda?

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

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

我有一个python函数,如下所示。在

def save_eng(request):
    flag = "true"
    if flag == "true" :
        db = Create()
        db.CreateSubmit_EngineerTable()
        flag = "false"
    else:
        pass

现在我只想调用CreateSubmit_Engineer()一次,即当它第一次被调用时。我将多次调用这个函数,但它不应该一次又一次地创建表。我使用了flag变量,它没有解决目的当我调用此函数时,标志被分配给“true”值。我知道我离得太近了,只需要一点点提示。任何非常感谢帮助。以上函数是否可以用其他更好的方式编写?在


Tags: 函数falsetruedbifrequestsavedef
2条回答

或者你可以在这里使用一个类。将创建表的代码放在构造函数上,即__init__(self),然后创建类的一个对象,并根据需要多次调用save_eng()

Class Engineer(object):
    def __init__(self):
        self.db = Create()
        self.db.CreateSubmit_EngineerTable()
    def save_eng(self, request):
        # Your other code specific to save_eng
        # you can use self.db here
        pass


# Create instance of class
eng = Engineer()
eng.save_eng(request)

你可以用装饰工来做这个。在

使用基于类的装饰器:

class callonce(object):

    def __init__(self, f):
        self.f = f
        self.called = False

    def __call__(self, *args, **kwargs):
        if not self.called:
            self.called = True
            return self.f(*args, **kwargs)
        print 'Function already called once.'

使用函数属性:

^{pr2}$

现在在函数上方添加decorator:

@callonce
def func():
    print "Creating Table"

演示:

>>> func()
Creating Table
>>> func()
Function already called once.
>>> func()
Function already called once.

相关问题 更多 >