2013-05-22 63 views
2

我有蟒蛇类似如下的功能:函数返回元组,而不是字符串

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

不要为此使用'* args'。 'def checkargs(x,y = something,* args)'会实现你想要的,并且更清晰。 – Neil

回答

5

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

x = args 

这就好比做:

x = ('abc',) 

有两个(当量)的方式来解决这个问题:要么明确指定x的元组的第一个元素:

x = args[0] 

或调用相同的元组拆包该x,y分配使用由分配给一个长度为1的元组:

x, = args 
+0

感谢您的解释 – dmb

1

这应该工作:

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

但是,如果你要检查的y的存在,并将其分配给默认something当它不存在,考虑重新设计的界面,简单地使用默认kwarg代替。

相关问题