性能:在迭代时根据选项更改数据

Performance: Changing the data depending on the options while iterating

我正在写一个个人项目,但发现自己处境艰难。为了让事情变得更简单,代码基本上是迭代和打印用户的名字。在迭代时,我检查是否启用了 getLastName 选项,如果它的 True 则将其添加到最终名称字符串中。为了更好地理解,请查看以下代码:

listOfNames = [{ "firstName": "John", "lastName": "David" }, { "firstName": "Bob", "lastName": "Oliver" }]
getLastName = True

for data in listOfNames:
    finalName = data["firstName"]
    if getLastName:
        finalName += f" - {data['lastName']}"
    print(finalName)

现在的问题是,我的实际代码非常复杂并且会检查很多因素(MiddleNamecoloredName、...)。因此,每次迭代时检查都会降低性能,因为它会检查许多因素并更改最终数据。在保持代码优化和良好的同时最好的方法是什么?

如果您对我要实现的目标感到困惑,请以这段代码为例:

# Original data
listOfData = [..., ..., ..., ...]

# Options (or factors)
premiumStatus = True
colored = True
moderator = True
banAble = False

# Iteration
for data in listOfData:
    finalData = ""
    # Changes
    if premiumStatus:
        finalData += "."
    if colored:
        finalData += ".."
    if moderator:
        finalData += "..."
    if banAble:
        finalData += "...."
    print(finalData)

这段代码显然很糟糕,因为它每次都会为每个用户检查选项。

~谢谢

第一个优化是在最后只构建一次字符串,而不是不断地连接它:

for data in listOfData:
    finalData = []
    if premiumStatus:
        finalData.append('.')
    ...
    print(''.join(finalData))

如果您知道 listOfData 的确切格式,您可以预先构建模板字符串,然后在循环内对其进行格式化:

listOfNames = [{ "firstName": "John", "lastName": "David", "number": 1}, { "firstName": "Bob", "lastName": "Oliver", "number": 2}]
getLastName = True
getFirstName = True
getNumber = False

template_parts = []
if getLastName:
    template_parts.append("{lastName}")
if getFirstName:
    template_parts.append("{firstName}")
if getNumber:
    template_parts.append("{number}")
template_string = " - ".join(template_parts)

for data in listOfNames:
    finalName = template_string.format(**data)
    print(finalName)