2016-02-18 28 views
1

比方說,我有一個函數有道用戶*指定參數和初始化參數在Python功能

def fix_results(parameter_1 =True, *some_kind_of_iterable): 

    if parameter_1: 
     df = pd.DataFrame(i for i in some_kind_of_iterable if i['count'] == 1) 
    else: 
     df = pd.DataFrame(i for i in some_kind_of_iterable) 

    And the some piece of code for df. 

    return df 

當我運行它想:

fix_results(*some_results), 

它工作正常。但是,當我試圖像

fix_results(parameter_1=False,*some_results) 

運行它,我得到這個錯誤:

TypeError: fix_results() got multiple values for keyword argument 'parameter_1' 

我在做什麼錯?

回答

2

在Python 2,調用該函數正確使用一個*args參數的唯一方式傳遞parameter_1的位置參數,即沒有parameter_1=位:

fix_results(False, *some_results) 

在Python 3,你可以修改你的函數定義和轉parameter_1成關鍵字唯一的參數:

def fix_results(*some_kind_of_iterable, parameter_1=True): 
    .... 

此功能可以通過

被稱爲
fix_results(parameter_1=False, *some_results) 

fix_results(*some_results, parameter_1=False) 

請注意,您的通話fix_results(*some_results),您聲稱「工作正常」,可能不會做你希望它做什麼:可迭代的第一個元素將被用作parameter_1

在Python 2另一種方法是通過可迭代中作爲一個單一的參數,而不是使用*args語法:

def fix_results(some_kind_of_iterable, parameter_1=True): 
    .... 

此功能現在可以被稱爲是這樣的:

fix_results(some_results, parameter_1=False) 
+0

那麼,是否有另一種方法來獲得相同的結果來聲明parameter_1的用途? (對於Python 2.7) –

+0

@GiorgosPerakis我已經添加了Python 2替代我的答案。 –

+0

我想用* args代替常規參數。但非常感謝! –