代码之家  ›  专栏  ›  技术社区  ›  John Clements

如何将函数应用于元组?[重复]

  •  0
  • John Clements  · 技术社区  · 4 年前

    这应该是一个简单的问题:如何在Python中将函数应用于元组?

    即:

    Python 3.9.9 (main, Nov 16 2021, 09:34:38) 
    [Clang 13.0.0 (clang-1300.0.29.3)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    >>> def g(a,b):
    ...   return a+b
    ... 
    >>> tup = (3,4)
    >>> 
    >>> g(tup)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: g() missing 1 required positional argument: 'b'
    >>> g.apply(tup)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    AttributeError: 'function' object has no attribute 'apply'
    >>> apply(g,tup)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    NameError: name 'apply' is not defined
    

    g 它需要一个元组,甚至是一个转换函数,用于一般的2-arg函数:

    >>> def conv2(fun):
    ...   def tuplefun(tup):
    ...     (a,b) = tup
    ...     return fun(a,b)
    ...   return tuplefun
    ... 
    >>> tuple_g = conv2(g)
    >>> tuple_g(tup)
    7
    

    ... 但这不适用于任意算术函数的一般情况。

    (ObResearch:我搜索了大约五分钟这个问题的答案,发现了一大堆关于熊猫数据帧的问题,但没有一个似乎能回答这个问题。我相信这有一个简单的答案,我为没有找到它而道歉,但如果我没有找到它,那么可能还有很多其他问题……换句话说,这是“问题#XXXXX的副本”(这里非常欢迎。)

    (讽刺的是,我最喜欢的问题是 完全一样的问题 关于Scala语言,从2010年开始。我想我在生活中扮演的角色是函数式程序员袭击其他语言…?)

    2 回复  |  直到 4 年前
        1
  •  2
  •   smac89    4 年前

    使用元组解包语法:

    >>> def g(a,b):
    ...   return a+b
    ... 
    >>> tup = (3,4)
    >>> 
    >>> g(*tup)
    
        2
  •  2
  •   Tim Roberts    4 年前

    你这样写:

    >>> g(*tup)