我需要定义一个函数,该函数可能会也可能不会取一个函数中定义的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)
答案 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"]