【问题标题】:Is there such thing as "apply" in python?python中是否有“应用”之类的东西?
【发布时间】:2013-06-11 21:19:36
【问题描述】:

我想知道,python 中是否有一个函数 - 我们现在称之为 apply- 执行以下操作:

apply(f_1, 1) = f_1(1)
apply(f_2, (1, 2)) = f_1(1, 2)
...
apply(f_n, (1, 2,..., n)) = f_n(1, 2,..., n) # works with a tuple of proper length 

因为它确实存在于例如。 A+ 和 Mathematica 曾经对我非常有用。 干杯!

【问题讨论】:

  • 谷歌搜索“apply”和“Python”怎么样?这是第一次命中。
  • @ArminRigo 我正在使用 Bing,伙计。 :)) :P 我不确定这些东西是怎么从我脑海中消失的。
  • 这也是第一个非赞助 Bing 热门。但第一个总体(赞助)必应热门歌曲是“Macintosh 上的 Python”。显然他们认为“应用”是“Applescript”的错字。微软在他们的死敌中还拥有多少股票? :)
  • 回答者:感谢您的解释!
  • 有趣的是,python 实际上已经在 Python 2.x 中以 apply 的名义申请。正如 pydoc apply 所指出的,它自 2.3 以来已被弃用。

标签: python wolfram-mathematica


【解决方案1】:

Python 对此具有语言级别的功能,称为“参数解包”,或简称为“splat”。

# With positional arguments
args = (1, 2, 3)
f_1(*args)

# With keyword arguments
kwargs = {'first': 1, 'second': 2}
f_2(**kwargs)

【讨论】:

【解决方案2】:

您可以使用* 运算符获得相同的效果:

f_1(*(1, 2)) = f_1(1, 2)
...

* 后面的表达式不必是元组,它可以是任何计算结果为序列的表达式。

Python 还有一个内置的apply 函数does what you'd expect,但自Python 2.3 起它已经过时,取而代之的是* 运算符。如果您出于某种原因需要apply 并希望避免被弃用的污点,那么实现一个是微不足道的:

def my_apply(f, args):
    return f(*args)

【讨论】:

    【解决方案3】:

    是的,在参数列表中使用* 运算符。举个实际例子:

    max(1, 2, 3, 4, 5)    # normal invocation
    => 5
    
    max(*[1, 2, 3, 4, 5]) # apply-like invocation
    => 5
    

    认为第二个 sn-p 等同于apply(max, [1, 2, 3, 4, 5])

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多