2017-05-23 150 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"]