动态增加/减少变量的值?

时间:2014-01-28 23:03:51

标签: python

我有一种情况,根据其他变量的值计算变量max_order,有时max_order为正,其他为负。这是我的代码:

def delta_value(direction):
    diff=value2-value1
    if diff > 0: ascend="+"; descend="-"
    elif diff < 0: ascend="-"; descend="+"
    if direction == "increase": return ascend
    elif direction == "decrease": return descend

def calc_max_order():
    global max_order
    if num < max_num:
        while num < max_num:
            exec("max_order%s=1" % delta_value("decrease"))
    elif num > max_num:
        while num > max_num:
            exec("max_order%s=1" % delta_value("increase"))

此代码似乎不起作用(即它不会更改max_order的值),但没有返回错误。它一直停留在while循环中。当calc_max_order不是函数时,代码确实有效,但在主块中。但是,我想让它成为清理代码的功能。

我知道大多数人都说使用exec是不明智的,但我只是开始学习python,我不知道怎么做。我想我可以使用一堆if语句,但我想有一种更简洁的方法可以做到。

所以,要明确的是,我的问题是:

有没有办法让exec("max_order%s=1" % delta_order_value("decrease"))在函数内部工作,或者是否有另一种方法可以动态增加/减少max_order,具体取决于delta_value的输出?

2 个答案:

答案 0 :(得分:1)

使用exec()是一个巨大的危险信号。您可以使用固定的+=和不同的delta来执行此操作。

delta = (+1 if ascending else -1)
max_order += delta

如果你需要扭转delta的感觉,否定它:

max_order -= delta;
# or
delta = -delta;
# or
delta *= -1;

答案 1 :(得分:1)

delta_value()更改为:

def delta_value(direction):
    diff = cmp(value2, value1)   # -1 for <, 0 for ==, 1 for >
    if direction == "increase": diff = -dif
    return diff

...同时...

代替exec,您现在可以拥有:

max_order = max_order + diff

差异是正面或负面,而不是“+”或“ - ”