2016-02-10 28 views
2

我需要一個函數,它將採取variadic arguments。參數的個數可以從1變爲N.理解Python中的元組和*參數的困惑

def abc(*args): 
    print "ABC" 
    print args 
    print len(args) 

def abc1(*args): 
    print "ABC1" 
    print args 
    print len(args) 
    print "------------" 


tup = ("Hello123") 
abc(*tup) 
abc1(tup) 
tup = ("Hello123", "Hello1234") 
abc(*tup) 
abc1(tup) 

上述程序的輸出是;

ABC 
('H', 'e', 'l', 'l', 'o', '1', '2', '3') 
8 
ABC1 
('Hello123',) 
1 
------------ 
ABC 
('Hello123', 'Hello1234') 
2 
ABC1 
(('Hello123', 'Hello1234'),) 
1 
------------ 

如果我考慮該輸出,當我只通過1參數在abc1(),元組的長度變爲8(保持*tup),其中如在abc1()它示出了長度爲1why and how? 但是,當我在上面的代碼中傳遞2個參數時,它的工作方式不同。輸出爲tupletuple of tuple。 因爲我寫的代碼,將所有N個

+2

'tup =(「Hello123」)'不創建元組。這只是帶有括號的字符串「Hello123」。如果你想要一個包含一個元素的元組,你必須輸入一個尾隨逗號,例如:'tup =(「Hello123」,)'。這個語法看起來有點奇怪,但它需要這樣的表達式,如'x =(y/2)'不被解釋爲元組。 –

回答

3

括號工作,不要讓元組,逗號做的工作如何解決這一問題。爲了建立一個單元素元組,正確的語法是

tup = ("Hello123",) # parentheses are optional but help readability 

這相當於

tup = "Hello123", 

請記住,你可以寫

x, y = y, x # swaps x and y using tuple packing/unpacking 

一樣好

(x, y) = (y, x) 

唯一exc其中圓括號爲強制是空元組()

+2

要添加到您的最後一句話,如果逗號會以其他方式表示其他內容,則還需要括號。例如,函數參數和列表項都用逗號分隔,所以要在這些環境中構建一個元組,需要括號(例如'foo((x,y))'和'[(x,y)]')。 – Blckknght