代码之家  ›  专栏  ›  技术社区  ›  CIsForCookies

当需要其他变量时,如何解包元组?

  •  1
  • CIsForCookies  · 技术社区  · 7 年前

    根据 this ,我可以调用一个函数,该函数接受N个参数,其中元组包含这些参数 f(*my_tuple) .

    有没有一种方法可以组合解包和解包变量?

    比如:

    def f(x,y,z):...
    a = (1,2)
    f(*a, 3)
    
    3 回复  |  直到 7 年前
        1
  •  5
  •   pault Tanjin    7 年前

    您提供的代码( f(*a, 3) )对Python3有效。对于Python2,您可以通过添加额外的值来创建一个新的元组。然后打开新的元组。

    f :

    def f(x, y, z):
        return x*y - y*z
    
    print(f(1,2,3))
    #-4
    

    a = (1,2)
    print(f(*a,3))
    #SyntaxError: only named arguments may follow *expression
    

    那就做一个新的吧 tuple

    new_a = a + (3,)
    print(f(*new_a))
    #-4
    

    使现代化

    我还应该添加另一个选项,即传入 命名 争论之后 * 表达式(如 SyntaxError ):

    print(f(*a, z=3))
    #-4
    
        2
  •  2
  •   chepner    7 年前

    有点重,但你可以用 functools.partial 部分适用 f 对中的论点 a

    from functools import partial
    
    partial(f, *a)(3)
    

    如果你打算打很多电话给我,这会更有用 用同样的两个论点 A. ,但第三个参数不同;例如:

    a = (1,2)
    g = partial(f, *a)
    for k in some_list:
        g(k)  # Same as f(1,2,k)
    
        3
  •  0
  •   ddor254    7 年前

    过关 *a 最后的 函数的变量,例如:

    def f(x,y,z):...
    a = (1,2)
    f(3, *a)
    

    在Python 2.7中为我工作