函数内部的for循环

1 投票
2 回答
6610 浏览
提问于 2025-04-17 11:55

我还在学习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

你遇到的错误是因为 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)
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)]

然后用你的 bars 来调用 add_plot

ar.add_plot(*bars)

撰写回答