Подавить вывод из виджета взаимодействовать ()

Я использую виджет для параметризации генерации некоторых данных. Я хотел бы захватить данные, не выводя их. Это возможно? Добавление ; после interact() не работает Пример:

import ipywidgets as widgets
from ipywidgets import interact, interactive, fixed

def generate_data(n, p, s):
    return np.random.negative_binomial(n, p, s)

w_n = widgets.IntSlider(min=1, max=10000, step=1)
w_p = widgets.FloatSlider(min=0.01, max=1, step = 0.01)
w_s = widgets.IntSlider(min=500,max=10000,step=50)

data = interact(generate_data, n = w_n, p = w_p, s = w_s);

2 ответа

Решение

Вместо того, чтобы возвращать значение в generate_data()Вы можете изменить глобальную переменную. Это позволяет избежать вывода на печать, и вы можете использовать val позже в вашем коде.

import ipywidgets as widgets
from ipywidgets import interact, interactive, fixed
import numpy as np

val = None
def generate_data(n, p, s):
    global val
    val = np.random.negative_binomial(n, p, s)

w_n = widgets.IntSlider(min=1, max=10000, step=1)
w_p = widgets.FloatSlider(min=0.01, max=1, step = 0.01)
w_s = widgets.IntSlider(min=500,max=10000,step=50)

interact(generate_data, n = w_n, p = w_p, s = w_s)

Я отправил запрос на извлечение ipywidgets, который решает эту проблему:

https://github.com/ipython/ipywidgets/pull/712

Изменения на самом деле очень просты. В этой версии вы просто передадите дополнительный kwarg interact:

data = interact(generate_data, n = w_n, p = w_p, s = w_s,
                __output_result=False)
Другие вопросы по тегам