不想永远运行if语句

时间:2017-01-09 19:31:41

标签: python django

我正在Django中编写应用程序。有一个要求,前10名用户将在第一次购买时下车。扣除金钱是用cron编写的。没有用户输入。

我在这里可以做的是将db中的列维护为used(boolean)并检查是否使用。

但是在某个时间点让我们说1个月并且假设所有前10个用户都购买了某些代码,但每次这个条件仍会检查。

假设我的应用程序将永远运行,我认为有一种方法可以实现这一点,这样我就不用写了。

例如models.py

class User(something):
    ....
    user = something.Boolean()

tasks.py

def x():
    users = User....all()
    for user in users:
        if user in 1st 10 and not user.used:
            charge(100)
        else:
            charge(150)

经过一段时间后,10月1日的每位用户都使用了促销活动。 所以我想删除那个丑陋的if语句,所以我的func x是:

def x():
    users = User....all()
    for user in users:
        charge(150)

2 个答案:

答案 0 :(得分:1)

我不确定你在这里问的是什么。

如果你想获得没有设置used标志的前10个用户,那么你应该这样做,而不是让所有用户:

users = User.objects.filter(used=False)[:10]

答案 1 :(得分:0)

如果要避免if语句,因为它很丑陋 - 你不能这样做,我建议你放置TODO Codetag来删除无用的if语句。

如果您对if语句没有问题,但想要获得性能,那么在确保if user in 1st 10 and not user.used永远不会评估为True之后,您可以在运行时覆盖您的函数,请参阅下面的简化覆盖:

def new_x():
    print 3


def x():
    print 2
    global x
    x = new_x


x() # 2
new_x() # 3
x() # 3