Python 返回未打包的参数

Python 返回未打包的参数,python,Python,是否可以返回未打包的参数?我所描绘的是返回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_a

是否可以返回未打包的参数?我所描绘的是
返回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。你好吗?我很好。


实际结果:
语法错误:只能将带星号的表达式用作赋值目标
。包含错误的行是
返回消息,*msg_args

简单。只是不要用星号和参考号作为列表

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

*仅在方法定义中使用,以表明它将是所有其余参数的元组。在方法内部,引用不带星号的元组。它只是一个元组

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

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

在Python3.5中,您当前的语法很好。

如果您没有将Python3.5+与一起使用,则无法将其解压缩为返回值的一部分。只需通过
元组
串联显式创建组合的
元组

return (msg,) + msg_args

它返回一个
元组
,其中第二个元素是varargs
元组
,而不是展开的版本。现在它是一个值和一个列表的
元组
。仍然不是要求的。@ShadowRanger yeah没有仔细阅读。认为问题是由*msg args引用的。msg只需要添加(在使用单个元素将其变成一个元组之后),
+
方法在Python 3.5中仍然有效,这只是为了澄清。实际上,在我第一次发布之后,我意识到代码使用的是列表(见编辑的问题),所以对我的代码有效的方法是
返回[msg,]+msg_args
。但这正是我要找的。@JimK:仅供参考,对于单个元素
list
literal,您不需要后面的逗号。这仅适用于
tuple
s(区别于使用paren进行分组的情况)。