【问题标题】:How to neaten up this code into a more Pythonic way?如何将这段代码整理成更 Pythonic 的方式?
【发布时间】:2019-04-15 10:27:54
【问题描述】:

我使用以下代码为我的数据绘制了一个箱须图:

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')  

这给了我下图:

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

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. 能否以更有效的方式编辑或整理第二个函数?

【问题讨论】:

标签: python python-3.x logic


【解决方案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

另外,我认为您可以在两个函数的外部和之前找到任何相同的变量(例如,在代码的最开头),它们应该仍然可以在函数中访问。

【讨论】:

  • 我只是编了这段代码作为例子,你可以在你的代码中使用同样的想法
猜你喜欢
  • 2010-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-12
  • 2019-06-30
  • 1970-01-01
相关资源
最近更新 更多