Javascript Python有办法通过函数传递参数吗
Javascript在每个函数中都有一个构造糟糕但很方便的“arguments”变量,因此您可以通过如下函数传递参数:Javascript Python有办法通过函数传递参数吗,javascript,python,Javascript,Python,Javascript在每个函数中都有一个构造糟糕但很方便的“arguments”变量,因此您可以通过如下函数传递参数: function foo(a, b, c) { return bar.apply(this, arguments); } function bar(a, b, c) { return [a, b, c]; } foo(2, 3, 5); // returns [2, 3, 5] 在Python中有没有一种简单的方法来做类似的事情 >>>
function foo(a, b, c) {
return bar.apply(this, arguments);
}
function bar(a, b, c) {
return [a, b, c];
}
foo(2, 3, 5); // returns [2, 3, 5]
在Python中有没有一种简单的方法来做类似的事情
>>> def foo(*args):
... return args
>>> foo(1,2,3)
(1,2,3)
这就是你想要的吗?用*展开参数怎么样
>>> def foo(*args):
... return bar(*(args[:3]))
>>> def bar(a, b, c):
... return [a, b, c]
>>> foo(1, 2, 3, 4)
[1, 2, 3]
我认为这与您的javascript代码片段非常相似。它不需要您更改函数定义
>>> def foo(a, b, c):
... return bar(**locals())
...
>>> def bar(a, b, c):
... return [a, b, c]
...
>>> foo(2,3,5)
[2, 3, 5]
请注意,
locals()
获取所有局部变量,因此您应该在方法开始时使用它,并在声明其他变量时复制它生成的字典。或者您可以使用中介绍的检查模块。是的,这是我应该说的
def foo(*args):
return bar(*args)
您不需要用(a,b,c)声明函数。bar(…)会得到foo(…)得到的任何东西
我的另一个更糟糕的答案如下:
我几乎要回答“不,这不容易做到”,但只要多说几句话,我想这是可以做到的。
@cbrauchli使用locals()是个好主意,但由于locals()也会返回局部变量,如果我们这样做的话
def foo(a,b,c):
n = "foobar" # any code that declares local variables will affect locals()
return bar(**locals())
我们将传递一个不需要的第四个参数n到条(a,b,c),我们将得到一个错误。要解决这个问题,您需要在第一行中执行类似arguments=locals()的操作,即
def foo(a, b, c):
myargs = locals() # at this point, locals only has a,b,c
total = a + b + c # we can do what we like until the end
return bar(**myargs) # turn the dictionary of a,b,c into a keyword list using **
Python的*args
功能的行为方式与下一个Javascript标准化预期的spread
和rest
相同。对于foo(a=1,b=2)
样式的关键字图,您可以使用**
关键字扩展来捕获它们:foo(**kwargs)
它将kwargs作为一个dict
发送给另一个函数,任何dict都可以通过bar(**kwargs)
作为关键字参数发送给另一个函数,你也可以混合匹配:foo(a,b,*args)
或者foo(a,b=None,**kargs)
在python 3中,foo(a,b,*args,c=None,**kargs)
这几乎就是我想要的,但是我必须在定义中使用*args,我做不到:def foo(a,b,c):返回条(*(args[:3])
我唯一能想到的就是在foo中使用locals()
locals().values()
将为您提供传递给foo的所有参数,但它们的顺序不一致。@futuraprime实际上,请将其删除。基于参数的名称,它们的顺序是一致的(也就是说,只要您的参数被命名为a、b和c,它们的值就会以相同的顺序出现)。但是,在“a,b,c”的情况下,您会得到顺序为“a,c,b”的值。这似乎不值得费心。当@andrew的答案更简单、更通俗、直截了当时,这个答案是如何被接受的?我自己真的很惊讶。