我有一种情况,根据其他变量的值计算变量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
的输出?
答案 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
差异是正面或负面,而不是“+”或“ - ”