对于函数内部的循环

时间:2012-01-30 00:33:57

标签: python function for-loop pychart

我还在学习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,或者它只是重复第一个条形n次。

修改:和错误:

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

2 个答案:

答案 0 :(得分:4)

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

ar.add_plot(bar1, bar2, bar3)

示例包括例如bar plotsinterval bar plots的PyChart文档的示例代码部分。

您不希望这样做,因为您的compactlist可能不方便,或者在不同的运行之间长度不同。另一种选择是使用argument unpacking。创建一个包含条形图对象的列表:

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)

答案 1 :(得分: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)