2016-11-14 59 views
-5

函數給出的數字應該是這樣的add(5)(10)(20)和答案應該是35Python方法即添加在括號

即一個應該能夠提供括號的任意數量。 in python

像它應該適用於任何數目的括號。

回答

1

我找到了一種方法做你所要求的:

class AddableInt(int): 
    def __call__(self, n): 
     return AddableInt(self + n) 

def add(n): 
    return AddableInt(n) 

add(5)(10)(20) # evaluates to 35 

這工作,因爲調用add(5)創建與5號__init__方法的價值AddableIntAddableInt宣佈,所以它只是使用int的默認構造函數。隨後的調用(10)(20)每個調用AddableInt__call__方法,它將自變量添加到自身並創建一個新的AddableInt

老答案:

Python不支持你所要求的東西。我可以拿出最接近的是:

from functools import partial 
def add(n=None, terms=None): 
    if n is None: 
     return sum(terms) if terms else 0 
    else: 
     if terms: 
      terms.append(n) 
     else: 
      terms = [n] 
     return partial(add, terms=terms) 

這樣稱呼它:

add(5)(10)(20)() # Note the extra parenthesis on the end 

更好的辦法是使用:

sum((5,10,20)) 
+0

它工作正常。但是,最後可以跳過額外的括號嗎? –

+0

@WasifAle:不可以。唯一可行的方法是每次調用函數都會返回一個可調用的函數,除非有一些標記已經到達。我讓哨兵一個空電話。嚴重的問題,爲什麼你要這個世界?它非常和諧。我想不出任何這種調用函數的有利方式。爲什麼你會比其他方式調用函數更喜歡這個? –

+0

謝謝史蒂芬,實際上這是一個作爲一項任務給我的問題。即使我不知道爲什麼這個東西可以更容易地完成,但我卻不知道。無論如何謝謝你的幫助。 –

-1

在Python中,你可以定義任意參數的函數像這樣:

def add(*args): 
    total=0 
    for num in args: 
     total+=num 
     #or whatever you want to do with the numbers 
    return total 

The *告訴代碼,從這裏到結尾的任何和所有參數都是可選的,並且可能有多個參數。它將所有額外的參數存儲在一個元組中。所以,如果你叫add(5, 10, 20)它會返回35,它會保存這樣的numbrs:

args=(5, 10, 20) 

這是一個元組。它將在一個值內存儲多個值。所以參數args將等於整個元組。

This link可能會幫助你多一點。

+0

爲什麼downvote?這將返回正確的答案,並且它可以讓您使用未知數量的參數調用該函數。如果我犯了一個錯誤,請修改帖子。 – Buzz

+0

我沒有downvote,但你的回答沒有解決OP所問的問題。你正在使用函數參數,而OP正在詢問某種函數currying。問題明確指出:_one應該能夠提供任意的**數目的括號** _ – RaGe