Python - 参数中的if语句?

时间:2018-06-11 15:08:59

标签: python

我想知道是否还有'停止'如果出现某种情况,则经过参数。

我当前的代码看起来像这样

for FMUV in FMUVList:
    ET.SubElement(fmiMV, "ScalarVariables",
                  name=FMUV.getName(),
                  valueReference=FMUV.getRNumber(),
                  description=FMUV.getDescription(),
                  start=FMUV.getStart())

始终设置Name和ValueReference,但描述和开始可能不是。我稍后还会添加更多的值,所以如果每个案例的语句可能不是最有趣的方式。

有人有任何想法吗?

2 个答案:

答案 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()正确处理此类值。