Где законно использовать рубиновый оператор нащельной рейки?

Возможно, вы выбрали неверный результат, когда фильтруете информационный кадр по value, предоставленному из dropdown. Код:

from flask import Flask
import dash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output
import pandas as pd
import plotly
import plotly.graph_objs as go

server = Flask(__name__)
app = dash.Dash(server=server)
df = pd.DataFrame({"Pos": [4, 5, 7, 8],
                   "Neg": [3, 6, 8, 9],
                   "Compound": [7, 11, 15, 17],
                   "values": [1, 2, 3, 4]})
app.layout = html.Div(
    [
        html.H1("Scatter with dropdown"),
        dcc.Dropdown(
              id='dropdown',
              options=[{'label': 'Pos', 'value': 'Pos'},
                       {'label': 'Neg', 'value': 'Neg'},
                       {'label': 'Compound', 'value': 'Compound'}],
              value='Compound'
          ),
        html.Div(id='scatter'),
          ])


@app.callback(
    Output("scatter", "children"),
    [Input("dropdown", "value")],
)
def change_scatter(value):
    """Change scatter according to dropdown."""
    global df
    dff = df[['values', value]]
    return html.Div(dcc.Graph(
        id='scatter-plot',
        figure={
            'data': [
                {
                    'x': dff['values'],
                    'y': dff[value],
                    'type': 'scatter',
                    # 'text': dff[value],
                    'name': value
                }
            ],
            'layout': {
                'xaxis': {'title': 'Position'},
                'yaxis': {'title': 'Values'},
            }
        }
    ))


if __name__ == "__main__":
    app.run_server(debug=True, port=8888)

Вывод: Scatter with dropdown Надеюсь, этот пример поможет вам найти ошибку

18
задан Dave Nolan 22 April 2009 в 15:16
поделиться

1 ответ

Во-первых, приоритет здесь не является проблемой, потому что foo = bar || (* zap) работает не лучше. Основное правило заключается в том, что вы не можете выполнять дополнительные операции с восклицательным знаком. Даже что-то простое, например foo = (* zap) , недопустимо. Это относится и к 1.9.

Сказав, что вы ожидаете foo = bar || * Зап сделать, если это сработало, что отличается от foo = bar || зап ? Даже в случае, подобном a, b = bar || * zap (что тоже не работает), a, b = bar || Зап выполняет то, что, как я предполагаю, было бы тем же.

Единственная ситуация, в которой это могло бы иметь какой-то смысл, это что-то вроде a, b = foo, bar || * Зап . Вы должны обнаружить, что большинство случаев, когда вы хотели бы использовать это, покрыто a, b = foo, * (bar || zap) . Если это не распространяется на ваш случай, вы, вероятно, должны спросить себя, чего вы действительно надеетесь достичь, написав такую ​​уродливую конструкцию.


РЕДАКТИРОВАТЬ:

В ответ на ваши комментарии, * zap || bar эквивалентен * (zap || bar) . Это показывает, насколько низок приоритет сплата. Точно, как низко это? Лучший ответ, который я могу вам дать, это «довольно низкий».

Для интересного примера рассмотрим метод foo , который принимает три аргумента:

def foo(a, b, c)
  #important stuff happens here!
end

foo (* bar = [1, 2, 3]) появится после присваивания и установит аргументы в 1, 2 и 3 соответственно. Сравните это с foo ((* bar = [1, 2, 3])) , который будет жаловаться на неправильное количество аргументов (1 для 3).

15
ответ дан 30 November 2019 в 08:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: