printf两次参数

时间:2017-05-26 01:39:29

标签: c printf

我想将一个额外的参数传递给import numpy as np import pandas as pd from bokeh.layouts import row, widgetbox from bokeh.models import CustomJS, Slider, Select from bokeh.plotting import figure, output_file, show, ColumnDataSource from bokeh.io import push_notebook, output_notebook, curdoc from bokeh.client import push_session output_notebook() #create sample pandaframe to work with, this will store the actual data a = np.arange(50).reshape((5,10)) labels = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"] val_a = pd.DataFrame(a, columns=labels ) # Here is a dict of some keys that I want to be able to pick from for plotting axis_map = { "A": "A", "B": "B", "C": "C" } #This is to update during the callback code = ''' var data = val_a; var val1 = x_axis.value; var val2 = y_axis.value; x = data['val1']; y = data['val2']; source.trigger('change'); print x ''' source = ColumnDataSource(data=dict(x=[], y=[])) callback = CustomJS(args=dict(source=source), code=code) #Create two select widgets to pick the features of interest x_axis = Select(title="X Axis", options=sorted(axis_map.keys()), value="A", callback = callback) callback.args["val1"] = x_axis y_axis = Select(title="Y Axis", options=sorted(axis_map.keys()), value="B", callback = callback) callback.args["val2"] = y_axis #plot the figures plot = figure(plot_width=400, plot_height=400) plot.circle(x= "x",y="y", source=source, line_width=3, line_alpha=0.6) #update the plot def update(): x_name = axis_map[x_axis.value] y_name = axis_map[y_axis.value] plot.xaxis.axis_label = x_axis.value plot.yaxis.axis_label = y_axis.value print x_name print val_a[x_name] source.data = dict( x=val_a[x_name], y=val_a[y_name], ) controls = [ x_axis, y_axis] for control in controls: control.on_change('value', lambda attr, old, new: update()) update() push_notebook() #Display the graph in a jupyter notebook layout = row(plot, x_axis, y_axis) show(layout, notebook_handle=True) 并打印两次,例如

printf

有没有办法做到这一点?

1 个答案:

答案 0 :(得分:15)

如果您使用的是Linux或其他类似UNIX的系统,则可以使用printf("%1$s%1$s\n", "hello"); 指定参数编号:

1$

在此示例中,printf("%*d", width, num); 表示"使用第一个参数"。我们也多次使用这种语法,因此我们可以使用一次给定的参数。

Linux man page for printf提供了更多详细信息:

  

参数必须与(在类型提升后)正确对应   转换说明符。默认情况下,参数在订单中使用   给出,每个' *'并且每个转换说明符都要求下一个   参数(如果参数不足,则会出错   给出)。还可以明确指定采用哪个参数   每个需要论证的地方,写着"%m $"代替   '%'和" m $"而不是' ',其中十进制整数m表示   在索引的所需参数的参数列表中的位置   从1开始。

printf("%2$*1$d", width, num);
     

Label B;
     

是等价的。第二种风格允许重复引用   同样的论点。 C99标准不包括使用' $'的样式,   它来自Single UNIX Specification。如果样式使用' $'   如果使用,它必须在所有转换中使用   参数和所有宽度和精度参数,但它可能是混合的   用" %%"不使用参数的格式。可能没有   使用' $'指定的参数数量的差距;例如,如果   如果指定了参数1和3,则还必须指定参数2   格式字符串中的某处。