如何在回调函数中获得换行符(%s或.format)?

问题描述 投票:1回答:1

我正在开发一个Dash网络应用,其想法是能够根据一个选定的模型和一些通过daq-slider输入的值来预测一个结果。

选择模型(从下拉菜单中)和返回预测结果(返回已选择的模型、预测的类(yesno)以及yes和no的百分比概率)都能正常工作。我的问题是,我希望返回的结果用换行符隔开--但它返回的结果是一个长段。

回调,看起来像这样(一个简化的版本+没有包括滑块和下拉菜单的代码)。

@callback(Output('slider-container', 'children'),
         [Input('model-dropdown', 'value'), 
          Input('v1', 'value'), 
          Input('v2', 'value')]

def predict_function(m, v1, v2):
    model = models[m]
    X_new = np.array([v1, v2])
    y_pred = model.predict(X_new)
    y_proba = model.predict_proba(X_new)*100
    df_proba = pd.DataFrame({'Yes': y_proba[:, 0], 'No': y_proba[:, 1]})
    yes = np.round(pd_proba.iloc[0]['Yes'], decimals=5)
    no = np.round(pd_proba.iloc[0]['No'], decimals=5)
    for i in range(len(X_new)):
        return "Model: %s \n" \
               "Prediction: %s \n" \
               "Probability for Yes: %s \n" \
               "Probability for No: %s \n" \ 
               %(m, y_pred[i], yes, no)

结果是这样的(在dash网页应用中)。

Model: <m> Prediction: <y_pred> Probability for Yes: <yes> Probability for No: <no>

而不是想要的结果。

Model: <m> 
Prediction: <y_pred> 
Probability for Yes: <yes> 
Probability for No: <no>

我试图用一个简单的例子来重现这个问题。这里它在结果中返回了\n(在Dash应用程序中它没有返回\n--在那里它只是忽略了\n,因为它不在那里)。我已经尝试了%s和.format。

def calc_x(x):
    y = x+2
    z = y+5
    return "X: %s \n Y: %s \n Z: %s" % (x, y, z)

calc_x(5)
# 'X: 5 \n Y: 7 \n Z: 12'

def calc_x(x):
    y = x+2
    z = y+5
    return ('X: {} \n Y: {} \n Z: {}').format(x, y, z)
# 'X: 5 \n Y: 7 \n Z: 12'

calc_x(5)


def calc_x(x):
    y = x+2
    z = y+5
    return ('X: {}\nY: {}\nZ: {}').format(x, y, z)

calc_x(5)
# 'X: 5\nY: 7\nZ: 12'

有人知道如何解决这个问题吗?

python callback string-formatting plotly-dash
1个回答
0
投票

在你的返回语句中添加以下内容

return (html.P(["Model".format(m),html.Br(),"Prediction".format(y_pred[i]),html.Br(),"Probability for Yes".format(yes),html.Br(),"Probability for No".format(no)]))

希望这个能用。

© www.soinside.com 2019 - 2024. All rights reserved.