我使用了可变参数函数来包装col=df.drop('category',1)
s=col.groupby(col.columns.str.findall(r'\d+').str[0],axis=1).prod().sum(1)
s/df.filter(like='weight').sum(1)
Out[33]:
0 67.108014
1 30.759168
2 86.160444
3 37.814871
dtype: float64
(或printf
)。
以下代码有效,除了在vprintf
的第一个可变参数上犯错误。另外,直接放置字符串会更改ASCII字符,但由于消息仍然是随机的,因此不能解决该问题。
它打印的是
warning_printf
代替
[Warning]
®¯$ address: 0x87afae8a
警告一词的颜色正确(无论如何都无所谓)。但是[Warning] Failed to initialize setting address: 0x87afae8a
似乎没有正确传递。我测试了向此函数添加更多变量。除了仅第一个可变参数msg_warn
外,它们都工作正常。
我的代码有什么问题?
msg_warn
在线编译器:link
答案 0 :(得分:2)
您需要将va_list
传递给期望它们的函数-与v*printf()
函数类似。
void colorful_vprintf(const char* header, const char* color, const char* fmt, va_list args)
{
printf("[%s%s%s] ", color, header, RESET_ANSI_COLOR);
vprintf(fmt, args);
}
void colorful_printf(const char* header, const char* color, const char* fmt, ...)
{
va_list args;
va_start(args, fmt);
colorful_vprintf(header, color, fmt, args);
va_end(args);
}
void warning_vprintf(const char* fmt, va_list args)
{
colorful_vprintf("Warning", WARNING_COLOR, fmt, args);
}
void warning_printf(const char* fmt, ...)
{
va_list args;
va_start(args, fmt);
warning_vprintf(fmt, args);
va_end(args);
}
*_vprintf
函数可以完成实际工作;具有省略号的函数只需获取va_list
作为参数,并将其传递给*_vprintf()
函数。
这是printf()
函数家族的接口(包装器)的通用模式。