2013-05-22 60 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代替。

相關問題