Для цикла внутри функции - PullRequest
1 голос
/ 30 января 2012

Я все еще изучаю 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 ]

4 голосов
/ 30 января 2012

То, что вы пытаетесь сделать, это передать несколько объектов гистограммы методу 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)
0 голосов
/ 30 января 2012

Ошибка, которую вы получаете, заключается в том, что цикл 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)
...