2012-10-25 62 views
2

我在尋找如何在python中使用可選參數。 我已閱讀this question但我不清楚。 可以說我有一個函數f,可以用一個或多個參數來理解時間序列。我是否有義務指定參數的數量併爲每個參數設置默認值? 我做的目的是能夠寫一個函數是這樣的:可選參數函數

簡單的函數:

def f(x,y): 
    return x + y 
#f(1,2) returns 3 

什麼,我想也是F(1,2,3)返回我6和f (7)返回我7

是否可以在不設置預定義數量的強制/可選參數的情況下編寫它? 是否可以寫入它而不必將默認值設置爲0? 如何寫這個函數?

它是一個簡單的數字例子,但我需要寫的功能是比較一組連續的對象。比較完成後,數據集將輸入一個神經網絡。

感謝您的閱讀。

編輯: 對象我餵我的函數都是這樣的元組(浮球,浮球,浮球,布爾,字符串)

+2

會傳遞一個列表作爲參數爲您工作嗎? – milancurcic

回答

4

您可以將*args放入函數中,然後使用任意(非關鍵字)參數。 * args是一個元組,所以你可以像任何Python元組/列表/迭代一樣迭代它。IE:

def f(*args): 
    theSum = 0 
    for arg in args: 
     theSum += arg 
    return theSum 

print f(1,2,3,4) 
+0

這就是seksy編程範式 – prince

4
def f(*args): 
    """ 
     >>> f(1, 2) 
     3 

     >>> f(7) 
     7 

     >>> f(1, 2, 3) 
     6 

     >>> f(1, 2, 3, 4, 5, 6) 
     21 
    """ 
    return sum(args) 

如果你需要做一些更復雜得多總結你可以只是遍歷args這樣的:

def f(*args): 
    r = 0 
    for arg in args: 
     r += arg 
    return r 

more information on *args and **kwargs

這個問題

也看到這部分的Python的教程:Arbitray Argument List

+0

你應該向OP顯示如何在一個循環中進行求和,使其略微更加明確:args'是函數中的一個元組。 (但是不要用'sum'來刪除答案。最終,這更加慣用) – mgilson

1

您可以使用如下語法:告訴它「吞噬」的所有參數,makng args元組

def f(*args): 
    return sum(args) 

*之前args。只要*args繼續前進,您也可以將此表單與標準參數混合使用。例如:

def g(a,b,*args): 
    return a * b * sum(args) 

第一個示例使用內置的sum函數來累計參數。 sum需要一個序列將其添加爲你:

>>> sum([1,3,5]) 
9 
>>> sum(range(100)) 
4950 

args名稱不是強制性的,但所使用的約定,以便最好堅持使用它。未定義的關鍵字參數也有**kwargs