函数返回元组而不是字符串

6

我有一个类似下面的 Python 函数:

def checkargs(*args):
    if len(args) == 1:
        x = args
        y = something
    elif len(args) == 2:
        x, y = args

    return x, y

当我只输入一个参数(字符串)时,x的输出是元组。当我输入两个参数(两个字符串)时,x和y作为字符串返回。如果我只输入一个参数,如何让x以字符串形式输出?


3
不要使用*argsdef checkargs(x, y=something, *args) 可以实现你想要的,并且更清晰易懂,但不改变原意。 - Neil
2个回答

6
这是因为args始终是一个元组,即使您只放入一个参数。所以,当您执行以下操作时:

x = args

这就像做以下操作一样:
x = ('abc',)

有两种(等效)方法可以修复这个问题:要么将x显式地分配给元组的第一个元素:

x = args[0]

或者通过将值赋给长度为1的元组来调用与x,y赋值相同的元组解包:

x, = args

1
这应该可以工作:

def checkargs(*args):
    try:
      x, y = args
    except ValueError:
      (x,), y = args, 'something'
    return x, y

然而,如果您要检查是否存在 y 并在其不存在时将其分配给默认的 something,请考虑重新设计接口,以便简单地使用默认的关键字参数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接