是否可以返回解压缩的参数?我想象的是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
。
答案 0 :(得分:3)
如果您不使用带有additional unpacking generalizations的Python 3.5+,则无法将其作为返回值的一部分解压缩。只需明确合并tuple
到tuple
串联:
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
*仅用于方法定义,以表明它将是所有其余参数的元组。在方法内部,您引用没有星形的元组。这只是一个元组。