4

我在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 以字符串形式出现?

4

2 回答 2

6

发生这种情况是因为args始终是一个元组,即使您只输入一个参数。所以,当你这样做时:

x = args

这就像做:

x = ('abc',)

有两种(等效)方法可以解决这个问题:或者显式分配x给元组的第一个元素:

x = args[0]

x,y或通过分配给长度为 1 的元组来调用分配使用的相同元组解包:

x, = args
于 2013-05-22T03:39:44.490 回答
1

这应该有效:

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

但是,如果您要检查是否存在y并在它不存在时将其分配给默认值something,请考虑重新设计界面以简单地使用默认 kwarg。

于 2013-05-22T03:44:08.050 回答