2017-05-23 83 views
0

我需要定義一個函數,該函數可能會或可能不會接受函數中定義的3個參數的一個參數。但是,我收到錯誤消息作爲無效的語法。在Python中傳遞變量參數

現在,如果我將第三個參數設置爲變量[value3],則會收到錯誤消息,因爲'float'對象不可迭代。

此外,我已經意識到,當所有參數都通過時,它會創建一個元組,這是不利的。

有人可以幫我解決問題嗎?

def createValues(value1, *value2, value3): 
    value = dict() 
    value["VALUE1"] = value1 
    value["VALUE2"] = value2 
    value["VALUE3"] = value3 

    print (value["VALUE1"],value["VALUE1"],value["VALUE1"]) 


createValues(2000,21000001,1) 
createValues(2000,,1) 
+0

您能否舉例說明當函數被0,1,2,3參數調用時應該如何表現? – timgeb

回答

3

你想要的是默認參數。這允許通過僅傳遞其一部分參數來調用您的函數,並將其他函數默認爲預定義的值。

例如:

def createValues(value1=12, value2=27, value3=42): 
    value = dict() 
    value["VALUE1"] = value1 
    value["VALUE2"] = value2 
    value["VALUE3"] = value3 

    print (value["VALUE1"],value["VALUE1"],value["VALUE1"]) 

將允許您通過以下任一方式來調用函數:

>>> createValues(1, 2, 3) 
1, 2, 3 
>>> createValues() 
12, 27, 42 
>>> createValues(value2=1) 
12, 1, 42 
>>> createValues(0, 5) 
0, 5, 42 

因爲你似乎與*元運算符混淆,我建議你閱讀有一點關於的論點拆包(例如,檢查this post)。

此外,在createValues(2000,,1)中使用兩個逗號在Python中絕不是合法的語法。

0

我從初學者的角度來看,我認爲有兩種方式:

使用列表

createValues的ARG成爲一個列表,所以你只要你想擁有儘可能多的價值。

def createValues(values): 
    value = dict() 
    #Inserting 
    for val in iter(values): 
     index = str(values.index(val)) 
     value["VALUE"+index] = val 

    #Printing 
    for (key, value) in value.iteritems(): 
     print ("Key : " + key + " | Value : " + value) 


createValues([2000,21000001,1]) 
createValues([2000,1]) 

使用默認值,您的具體情況

3 ARGS

def createValues(value1, value3, value2 = None): 
    value = dict() 
    value["VALUE1"] = value1 
    if value2 is not None: 
     value["VALUE2"] = value2 
    value["VALUE3"] = value3 

    print (value["VALUE1"],value["VALUE1"],value["VALUE1"]) 


createValues(2000,21000001,1) 
createValues(value1 = 2000, value3 = 1) 
0

你不能這樣調用一個函數:

createValues(2000,,1) 

但是,您可以檢查參數是None並與此一起工作。現在

def createValues(value1, value2, value3): 
    value = dict() 
    value["VALUE1"] = value1 or 0 
    value["VALUE2"] = value2 or 0 
    value["VALUE3"] = value3 or 0 

    print (value["VALUE1"],value["VALUE1"],value["VALUE1"]) 

,你可以使用這樣的功能:

createValues(2000, None, 1) 

我已經使用了默認值0,任何缺少的參數。

此外,參數未被轉換爲tuple。打印時您將參數打包到元組中。試試這個(注意缺少括號):

print value["VALUE1"], value["VALUE1"], value["VALUE1"]