函数内部简化if语句的不同方法。蟒蛇

时间:2020-05-13 17:01:22

标签: python function if-statement

我有一个名为android:imeOptions="actionNext"的函数,该函数接受另一个函数zone的返回值,函数HeartRate然后将返回一个值为{{1}的zone }和一个特殊键(取决于)是值lands。

dict函数可以正常工作,但是看起来很重复。有人可以引导我朝正确的方向前进吗?您知道一些方法可以帮助我简化此过程,并且使其不再重复吗?或解决此问题的其他方法,例如格式不同,不是python的新手,我的python'toolbox'很小。谢谢

HeartRate

2 个答案:

答案 0 :(得分:0)

我认为您的代码(不包括逻辑和语法错误)很好。这有点重复,但很清楚。您不想混淆代码的实际作用。也就是说,这是使用间隔树的替代方法。我不确定间隔,因为您的代码会跳过注释中指出的一些值。

[<WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>] # first WaitQueueHandler added by Producer
[<WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>]
[<WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>]
[<WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>]
[<WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>]
[<WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>]
[<WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>]
[<WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>]
[<WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>]
[<WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>]
[<WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>]
[<WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>, <WaitQueueHandler (NOTSET)>]

如果您知道from intervaltree import IntervalTree t = IntervalTree() t[.85:.89] = 'zone2' t[.89:.93] = 'zone3' t[.93:.98] = 'zone4' t[.98:1.05] = 'zone5' def zone(p): # This assumes no missing/overlapping intervals. z = 'zone1' if p < t.begin() else 'VOZone' if p >= t.end() else t.at(p).pop().data return {z: p} tests = [0, .85, .89, .93, .98, 1.05, 1.1] for p in tests: print(zone(p)) 的边界(在此示例中为0和2),则可以通过添加以下间隔来简化此操作:

HR_percentage

输出:

t[0:.85] = 'zone1'
t[1.05:2] = 'VOZone'

def zone2(p):
    return {t.at(p).pop().data: p}

for p in tests:
    print(zone2(p))

答案 1 :(得分:0)

除使用的键外,返回值在每种情况下均相同。该部分可以重构。

def zone(HR_percentage):
    if HR_percentage < .85:
        key = 'zone1'
    elif .85 <= HR_percentage < .89:
        key = 'zone2'
    elif .89 <= HR_percentage < .93:
        key = 'zone3'
    elif .93 <= HR_percentage < .98:
        key = 'zone4'
    elif .98 <= HR_percentage < 1.05:
        key = 'zone5'
    else:
        key = 'VOZone'

    return {key: HR_percentage}

鉴于您正在检查一个连续范围,并且已按顺序检查了每个子句,则可以将检查简化为

def zone(HR_percentage):
    if HR_percentage < .85:
        key = 'zone1'
    elif HR_percentage < .89:  # We know 0.85 <= HR_percentage, no need to check again
        key = 'zone2'
    elif HR_percentage < .93:
        key = 'zone3'
    elif HR_percentage < .98:
        key = 'zone4'
    elif HR_percentage < 1.05:
        key = 'zone5'
    else:
        key = 'VOZone'

通过一些创造性的缩进和换行,我们接下来可以编写

def zone(HR_percentage):
    key = ('zone1' if HR_percentage < .85 else
           'zone2' if HR_percentage < .89 else
           'zone3' if HR_percentage < .93 else
           'zone4' if HR_percentage < .98 else
           'zone5' if HR_percentage < 1.05 else
           'VOZone')
    return {key: HR_percentage}

除此之外,您还需要一个单独的数据结构,例如suggested by @hmm