1

我仍在学习 Python,我很想知道一种方法来完成以下工作:

a_function(
  for n,item in enumerate(list):
    inside_function(code code code,
                    code code code,
                    code code code))

所以有一个函数嵌套在另一个函数中,我需要多次播放内部函数,而不是外部函数。我正在使用的代码不是我的,所以我无法更改这些函数的工作方式。

如果有人需要,我可以使用实际代码进行编辑,它来自 PyChart。

编辑:实际代码:

ar = area.T(y_coord = category_coord.T(data, 0),
            x_grid_style=line_style.gray50_dash1,
            x_grid_interval=chartlength/5, x_range = (0,chartlength),
            x_axis=axis.X(label="X label"),
            y_axis=axis.Y(label="Y label"))

chart_object.set_defaults(interval_bar_plot.T, direction="horizontal",
                          width=5, cluster_sep = 0, data=data)

ar.add_plot(
  for n,item in enumerate(compactlist):
    interval_bar_plot.T(line_styles = [None, None],
                    fill_styles = [fill_style.red, None],
                    label=compactlist[n], cluster=(n,len(compactlist)))
)

can = canvas.default_canvas()
can.set_title("Chromosome comparison")
can.set_author("Foo")
ar.draw()

ar.add_plot 函数在画布中创建一个工作区域(据我了解),而 interval_bar_plot 函数则一一创建条形图。所以我需要多个 interval_bar_plot 函数,但只有一个 add_plot,或者它只是重复第一个 bar n 次。

编辑:和错误:

  File "intvlbar.py", line 105
    for n,item in enumerate(compactlist):
      ^
SyntaxError: invalid syntax
4

2 回答 2

4

您要做的是将几个条形图对象传递给该add_plot方法(在此处记录)。您可以做到这一点的一种方法是明确地传递它们。例如:

ar.add_plot(bar1, bar2, bar3)

例如,PyChart 文档的条形图区间条形图的示例代码部分就是这样的例子。

您不想这样做,因为您compactlist的运行时间可能会很长或不同的长度。另一种选择是使用参数解包。创建一个包含条形图对象的列表:

bars = [interval_bar_plot.T(line_styles = [None, None],
                            fill_styles = [fill_style.red, None],
                            label=compactlist[n], cluster=(n,len(compactlist)))
        for n,item in enumerate(compactlist)]

现在打电话add_plot给你bars

ar.add_plot(*bars)
于 2012-01-30T01:09:08.293 回答
0

您得到的错误是因为for循环本身不返回任何内容。但是for循环被放置在ar.add_plot()参数应该去的函数调用中。所以 python 告诉你“ar.add_plot()需要参数,但是这个 for 循环不会给我”

需要什么参数ar.add_plot()

你需要更接近这个的东西(尽管这可能不正确):

ar.add_plot()
for n,item in enumerate(compactlist):
  interval_bar_plot.T(line_styles = [None, None],
        fill_styles = [fill_style.red, None],
        label=compactlist[n], cluster=(n,len(compactlist)
于 2012-01-30T00:51:34.747 回答