标签: multiple-arguments

在Python的argparse中多次使用相同的选项

我正在尝试编写一个接受多个输入源的脚本,并对每个源做一些事情.像这样的东西

./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)

python argparse multiple-arguments

59
推荐指数
4
解决办法
3万
查看次数

将具有多个参数的函数传递给DataFrame.apply

假设我有一个像这样的数据框:

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)

我不是在寻找解决此特定示例的变通方法,而只是在一般情况下如何执行此操作。任何建议将不胜感激,谢谢。

python function pandas multiple-arguments

9
推荐指数
2
解决办法
5652
查看次数

R:分别将函数应用于两个变量的每个元素

我有一个带有两个变量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解决方案比应用更快).

r apply mapply multiple-arguments

7
推荐指数
1
解决办法
1万
查看次数

何时为多参数构造函数使用显式说明符?

我最近了解了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)

这编译!

但是我看不到任何可能需要这种语法的相应场景.

有人能提供一个最小的例子吗?

c++ constructor explicit c++11 multiple-arguments

6
推荐指数
1
解决办法
1076
查看次数

迭代可变参数模板类型

我已经被困在这一段时间了,我的想法用尽了,帮助赞赏!

以下段是示例代码,以简化.

假设如下:

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

6
推荐指数
1
解决办法
536
查看次数

Lua返回多个值作为参数

我有一个函数(我不能更改)返回多个值:

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)

xaybzc吗?

lua arguments return function multiple-arguments

5
推荐指数
1
解决办法
887
查看次数

返回带有多个参数的语句

在激活-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)

我知道数组作为引用传递给函数,所以基本上不需要从这个函数返回一些东西.但是,你能告诉我为什么有人会这样宣布一个功能.这个工作人员让我困惑.提前致谢

c arrays pointers return multiple-arguments

2
推荐指数
1
解决办法
101
查看次数

使用多个列表作为函数的输入参数(Python)

我知道属性映射(函数,列表)将函数应用于单个列表的每个元素.但是如果我的函数需要多个列表作为输入参数呢?

例如我试过:

   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)

如果有人能让我知道这是怎么可能的,或者我指的是一个可以在类似情况下回答我的问题的链接,我将不胜感激.

python input function multiple-arguments

2
推荐指数
1
解决办法
2714
查看次数