返回解压缩的参数

时间:2015-12-14 23:20:05

标签: python

是否可以返回解压缩的参数?我想象的是return msg, *msg_args会返回一个元组,例如(msg, msg_args[0], msg_args[1], msg_args[2])。这将允许我将其发送到另一个函数进行字符串插值。

def add_to_message(msg, *msg_args):
    msg += "  I am %s."
    msg_args = list(msg_args)
    msg_args.append("fine")
    return(msg, *msg_args)

def display_localized_message(msg, *msg_args):
    """Translate message, then interpolate and print it."""
    print(msg % msg_args)

display_localized_message(
    *add_to_message("Hi %s.  How are %s?", "Peter", "you"))

期望的结果:打印Hi Peter. How are you? I am fine.

实际结果:SyntaxError: can use starred expression only as assignment target。包含错误的行是return msg, *msg_args

3 个答案:

答案 0 :(得分:3)

如果您不使用带有additional unpacking generalizations的Python 3.5+,则无法将其作为返回值的一部分解压缩。只需明确合并tupletuple串联:

return (msg,) + msg_args

答案 1 :(得分:1)

在3.5之前的python版本中,只需使用它构建一个新元组:

def add_to_message(msg, *msg_args):
    msg += "  I am %s."
    msg_args.append("fine")
    return (msg,) + msg_args

在python 3.5中,您当前的语法没问题。

答案 2 :(得分:0)

简单。只是不要将星号和引用用作列表。

def add_to_message(msg, *msg_args):
    msg += "  I am %s."
    msg_args.append("fine")
    return (msg,) + msg_args

*仅用于方法定义,以表明它将是所有其余参数的元组。在方法内部,您引用没有星形的元组。这只是一个元组。