我正在尝试编写一个接受多个输入源的脚本,并对每个源做一些事情.像这样的东西
./my_script.py \
-i input1_url input1_name input1_other_var \
-i input2_url input2_name input2_other_var \
-i input3_url input3_name
# notice inputX_other_var is optional
Run Code Online (Sandbox Code Playgroud)
但我无法弄清楚如何使用它argparse.它似乎设置为每个选项标志只能使用一次.我知道如何将多个参数与单个选项(nargs='*'或nargs='+')相关联,但仍然不允许我-i多次使用该标志.我该如何完成这项工作?
为了清楚起见,我最终想要的是一系列字符串列表.所以
[["input1_url", "input1_name", "input1_other"],
["input2_url", "input2_name", "input2_other"],
["input3_url", "input3_name"]]
Run Code Online (Sandbox Code Playgroud) 假设我有一个像这样的数据框:
df = pd.DataFrame([['foo', 'x'], ['bar', 'y']], columns=['A', 'B'])
A B
0 foo x
1 bar y
Run Code Online (Sandbox Code Playgroud)
对于数据帧,我知道如何在Apply中使用单个参数函数,如下所示:
def some_func(row):
return '{0}-{1}'.format(row['A'], row['B'])
df['C'] = df.apply(some_func, axis=1)
df
A B C
0 foo x foo-x
1 bar y bar-y
Run Code Online (Sandbox Code Playgroud)
当数据框包含多个输入参数时,如何使用Apply?这是我想要的示例:
def some_func(row, var1):
return '{0}-{1}-{2}'.format(row['A'], row['B'], var1)
df['C'] = df.apply(some_func(row, var1='DOG'), axis=1)
df
A B C
0 foo x foo-x-DOG
1 bar y bar-y-DOG
Run Code Online (Sandbox Code Playgroud)
我不是在寻找解决此特定示例的变通方法,而只是在一般情况下如何执行此操作。任何建议将不胜感激,谢谢。
我有一个带有两个变量x和y的函数:
fun1 <- function(x,y) {
z <- x+y
return(z)
}
Run Code Online (Sandbox Code Playgroud)
该功能本身可以正常工作:
fun1(15,20)
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用带有两个x和y向量的应用函数时,我没有得到正确的56*121数组
Lx <- c(1:56)
Ly <- c(1:121)
mapply(fun1, Lx, Ly)
Run Code Online (Sandbox Code Playgroud)
我将非常感谢您的帮助以及有关最快解决方案的建议(例如,data.table或dplyr解决方案比应用更快).
我最近了解了explicit说明者.
假设我们有:
f( W, W, W );
Run Code Online (Sandbox Code Playgroud)
如果我们这样做
f( 42, 3.14, "seven" );
Run Code Online (Sandbox Code Playgroud)
编译器将尝试以下隐式转换:
f( W(42), W(3.14), W("seven") );
Run Code Online (Sandbox Code Playgroud)
如果我们为W定义了匹配的构造函数,即:
W(int);
W(double);
W(std::string);
Run Code Online (Sandbox Code Playgroud)
......它会成功的.
但是,如果我们明确第一个:
explicit W(int);
Run Code Online (Sandbox Code Playgroud)
...这会禁用隐式转换.
你现在必须写:
f( W(42), 3.14, "seven" );
Run Code Online (Sandbox Code Playgroud)
即它迫使您明确说明转换
现在回答这个问题:
有可能写:
explicit W(int,int); // 2 arguments!
Run Code Online (Sandbox Code Playgroud)
这编译!
但是我看不到任何可能需要这种语法的相应场景.
有人能提供一个最小的例子吗?
我已经被困在这一段时间了,我的想法用尽了,帮助赞赏!
以下段是示例代码,以简化.
假设如下:
class Base;
class DerivedA : public Base;
class DerivedB : public Base;
Run Code Online (Sandbox Code Playgroud)
还有这个:
class Manager {
public:
std::map<std::type_index, Base*> container;
template<typename ...T>
void remove() {
// Iterate through templates somehow and...
container.erase(typeid(T));
}
}
Run Code Online (Sandbox Code Playgroud)
基本上我通过使用std :: type_index作为键,在容器中存储派生类的唯一实例.允许我这样做:
manager.remove<DerivedA>();
Run Code Online (Sandbox Code Playgroud)
话虽如此,我希望能够做同样的事情,但允许多个模板直接删除多个实例,如下:
manager.remove<DerivedA, DerivedB>()
Run Code Online (Sandbox Code Playgroud)
我知道可以迭代这里描述的可变参数模板,但我不断收到编译错误......
错误C2440:'初始化':无法从'initializer-list'转换为'std :: initializer_list'
错误C3535:无法从'initializer-list'推断出'auto'的类型
...当我尝试运行此代码时:
template<typename ...T>
void remove() {
// Iterate through templates somehow and...
auto list = {(container.erase(typeid(T)))... };
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?非常感谢你.
c++ templates initializer-list variadic-templates multiple-arguments
我有一个函数(我不能更改)返回多个值:
function f1()
...
return a, b
end
Run Code Online (Sandbox Code Playgroud)
另一个函数(我不能更改)带有多个参数:
function f2(x, y, z)
...
end
Run Code Online (Sandbox Code Playgroud)
有没有办法做:
f2(f1(), c)
Run Code Online (Sandbox Code Playgroud)
令x为a, y为b和z为c吗?
在激活-Wall编译我的C代码后,出现以下警告
left operand of comma operator has no effect
Run Code Online (Sandbox Code Playgroud)
这与我的return陈述中提出的多个论点有关.故事如下:假设有一堆动态分配的3D数组(A,B和C),并希望对它们进行一些操作.数组被定义为指向指针的指针,并使用malloc(标准过程)进行分配.对它们的操纵将在单独的功能中进行.出于某种原因,我将该函数声明为三指针,如下所示:
***func( double ***A, double ***B, double ***C)
{
do some work here on A, B and C
return(A, B, C);
}
Run Code Online (Sandbox Code Playgroud)
我知道数组作为引用传递给函数,所以基本上不需要从这个函数返回一些东西.但是,你能告诉我为什么有人会这样宣布一个功能.这个工作人员让我困惑.提前致谢
我知道属性映射(函数,列表)将函数应用于单个列表的每个元素.但是如果我的函数需要多个列表作为输入参数呢?
例如我试过:
def testing(a,b,c):
result1=a+b
result2=a+c
return (result1,result2)
a=[1,2,3,4]
b=[1,1,1,1]
c=[2,2,2,2]
result1,result2=testing(a,b,c)
Run Code Online (Sandbox Code Playgroud)
但这只会连接数组:
result1=[1,2,3,4,1,1,1,1]
result2=[1, 2, 3, 4, 2, 2, 2, 2]
Run Code Online (Sandbox Code Playgroud)
我需要的是以下结果:
result1=[2,3,4,5]
result2=[3,4,5,6]
Run Code Online (Sandbox Code Playgroud)
如果有人能让我知道这是怎么可能的,或者我指的是一个可以在类似情况下回答我的问题的链接,我将不胜感激.