我想知道是否还有'停止'如果出现某种情况,则经过参数。
我当前的代码看起来像这样
for FMUV in FMUVList:
ET.SubElement(fmiMV, "ScalarVariables",
name=FMUV.getName(),
valueReference=FMUV.getRNumber(),
description=FMUV.getDescription(),
start=FMUV.getStart())
始终设置Name和ValueReference,但描述和开始可能不是。我稍后还会添加更多的值,所以如果每个案例的语句可能不是最有趣的方式。
有人有任何想法吗?
答案 0 :(得分:1)
您可以使用星形映射 - Python语法,它允许您直接发送字典作为函数调用中的parameter_names / arguments部分。
你所要做的就是“策划”你的字典,以便你压制没有有意义的价值观的键。对于这种情况,假设你为不需要的参数得到None:
for FMUV in FMUVList:
params = dict(
name=FMUV.getName(),
valueReference=FMUV.getRNumber(),
description=FMUV.getDescription(),
start=FMUV.getStart())
)
params = {key:value for key, value in params.items() if value is not None}
ET.SubElement(fmiMV,"ScalarVariables", **params)
(用于过滤未使用值的字典理解可以直接放在函数调用中,但代价是可读性)
答案 1 :(得分:0)
一个解决方案涉及三元运算符。
首先,确保您的函数正确处理值为None
的变量。然后,
for FMUV in FMUVList:
ET.SubElement(fmiMV,"ScalarVariables",
name = FMUV.getName(),
valueReference = FMUV.getRNumber(),
description = (FMUV.getDescription() if <conditionA> else None),
start = (FMUV.getStart() if <conditionB> else None)
)
你仍然需要为每个“可选”参数添加其中一个,但至少它只在一个地方。
或者,无论您的FMUV
对象是什么,您都可以确保FMUV.getDescription()
和FMUV.getStart()
在未设置的情况下返回None
,然后再次制作确保ET.SubElement()
正确处理此类值。