在python中传递变量参数

时间:2017-05-23 08:58:51

标签: python function

我需要定义一个函数,该函数可能会也可能不会取一个函数中定义的3个参数的一个参数。但是,我收到错误消息作为无效语法。

现在,如果我将第三个参数作为变量[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)

3 个答案:

答案 0 :(得分: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中的有效语法。

答案 1 :(得分: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个参数

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)

答案 2 :(得分: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"]