【问题标题】:Passing formatted strings to functions as arguments将格式化字符串作为参数传递给函数
【发布时间】:2013-07-02 04:38:15
【问题描述】:

我想知道是否有完成以下任务的好方法:我想运行一个 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 个。

非常感谢 - 非常感谢您提供线索。

【问题讨论】:

    标签: python string formatting arguments


    【解决方案1】:

    您的代码现在正在做的是将单个字符串传递给 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)
    

    【讨论】:

      猜你喜欢
      • 2017-04-25
      • 1970-01-01
      • 1970-01-01
      • 2017-09-04
      • 2020-12-19
      • 2012-07-26
      • 1970-01-01
      • 1970-01-01
      • 2020-03-14
      相关资源
      最近更新 更多