让我们说我有一个虚拟函数,可以准确地返回作为参数的内容:
def dummy_single(arg1):
"""Repeat the same argument."""
return arg1
我可以通过以下方式使用此功能:
same_obj1 = dummy_single(obj1)
现在,如果我想允许此函数接受多个参数,并返回相同的参数,我可以打包并解压缩参数:
def dummy_multiple(*args):
"""Repeat all given arguments."""
return args
请注意,此功能恰好是身份,但这不是问题的核心。您可以想象任何返回可变长度元组的函数。
使用多个参数调用时效果非常好:
same_obj1, same_obj2 = dummy_multiple(obj1, obj2)
但是,这不会像预期的那样奏效:
same_tuple = dummy_multiple(obj1)
same_obj1
包含一个(打包的)元组,而不是前两个示例中的对象。我考虑过以下方式修复此行为,但它看起来并不干净,因为返回的类型因参数而异。
def dummy_multiple_fixed(*args):
"""Repeat all given arguments."""
if len(args) == 1:
return args[0]
return args
这不是一个关键问题,很容易修复。但我找不到一个干净而优雅的方法来解决这个问题。
答案 0 :(得分:4)
你不应该在长度为1的元组中做出特殊情况。函数应该有一个明确定义的返回类型。
虽然,知道你可以解包长度为1的元组:
def dummy_multiple(*args):
"""Repeat all given arguments."""
return args
same_obj1, = dummy_multiple(1)
# ^ notice the comma here
print(same_obj1) # 1