将格式化字符串传递给函数作为参数

时间:2013-07-02 04:38:15

标签: python string formatting arguments

我想知道是否有一种很好的方法来完成以下操作:我想要运行for循环并使用迭代和有时随机属性创建对象实例。特别是,我想说的是这样的话:

OUT_TASK = "Task_{id1}, FUNCTION, {id2}, task{id3}_types, None"
t = Task(OUT_TASK.format(id1=i, id2='doNothing', id3=i))

现在编译器告诉我,我只向Task()传递2个参数,而它至少需要4个。

非常感谢 - 线索受到赞赏。

1 个答案:

答案 0 :(得分:0)

您的代码现在正在做的是将单个字符串传递给Task()构造函数。你想要的是分别格式化每个参数:

t = Task("Task_{0}".format(i), "FUNCTION", id2, "task{0}_types".format(i), None)

如果您事先并不知道您将拥有多少参数,则可以构建一个列表并使用*args方法传递它:

params = []
params.append("Task_{0}".format(i))
# ...
params.append("task{0}_types".format(i))
params.append(None)
t = Task(*params)

虽然更好的方法是字典(**kwargs方法),但是从那时起你不必关心构造函数参数的顺序:

params = {}
params['something'] = "Task_{0}".format(i)
params['something_else'] = "task{0}_types".format(i)
# ...
params['last_thing'] = None
t = Task(**params)