如何将这些代码整理成更Python化的方式?

时间:2019-04-15 10:27:55

标签: python python-3.x logic

我已使用以下代码为我的数据绘制了一个盒子和晶须图:

def make_labels(ax, boxplot):
    iqr = boxplot['boxes'][0]
    caps = boxplot['caps']
    med = boxplot['medians'][0]
    fly = boxplot['fliers'][0]
    xpos = med.get_xdata()
    xoff = 0.1 * (xpos[1] - xpos[0])
    xlabel = xpos[1] + xoff
    median = med.get_ydata()[1]
    pc25 = iqr.get_ydata().min()
    pc75 = iqr.get_ydata().max()
    capbottom = caps[0].get_ydata()[0]
    captop = caps[1].get_ydata()[0]
    ax.text(xlabel, median, 'Median = {:6.3g}'.format(median), va='center')
    ax.text(xlabel, pc25, '25th percentile = {:6.3g}'.format(pc25), va='center')
    ax.text(xlabel, pc75, '75th percentile = {:6.3g}'.format(pc75), va='center')
    ax.text(xlabel, capbottom, 'Bottom cap = {:6.3g}'.format(capbottom), va='center')
    ax.text(xlabel, captop, 'Top cap = {:6.3g}'.format(captop), va='center')
    for flier in fly.get_ydata():
        ax.text(1 + xoff, flier, 'Flier = {:6.3g}'.format(flier), va='center')  

这给出了下图: enter image description here

现在,我要做的就是获取我们可以在图中看到的所有“飞行物”点,并将其放入列表中,为此,我执行了以下操作:

fliers_data = []    
def boxplots(boxplot):
    iqr = boxplot['boxes'][0]
    fly = boxplot['fliers'][0]
    pc25 = iqr.get_ydata().min()
    pc75 = iqr.get_ydata().max()
    inter_quart_range = pc75 - pc25
    max_q3 = pc75 + 1.5*inter_quart_range
    min_q1 = pc25 - 1.5*inter_quart_range   
    for flier in fly.get_ydata():
        if (flier > max_q3):
            fliers_data.append(flier)
        elif (flier < min_q1):
            fliers_data.append(flier)

现在,我有2个查询:

  1. 在两个函数中,都有几行相似。有没有一种方法可以一次定义它们并在两个函数中使用它们?
  2. 第二种功能能否以更有效的方式进行编辑或调整?

1 个答案:

答案 0 :(得分:1)

我认为它基本上很整洁,我唯一能建议的是函数不同部分之间的空格,也许还有一些引号可以告诉某人阅读每个部分的作用?

例如这样的东西:

def myfunction(x):

# checking if x equals 10
    if x == 10:
        return True

# if equals 0 return string
    elif x == 0:
        return "equals zero"

# else return false
    else:
        return False

此外,我认为您可以在两个函数之间找到相同且相同的变量(例如,在代码的开头),并且仍然可以在函数中访问它们。