性能:在迭代时根据选项更改数据
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)
现在的问题是,我的实际代码非常复杂并且会检查很多因素(MiddleName
、coloredName
、...)。因此,每次迭代时检查都会降低性能,因为它会检查许多因素并更改最终数据。在保持代码优化和良好的同时最好的方法是什么?
如果您对我要实现的目标感到困惑,请以这段代码为例:
# 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)
我正在写一个个人项目,但发现自己处境艰难。为了让事情变得更简单,代码基本上是迭代和打印用户的名字。在迭代时,我检查是否启用了 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)
现在的问题是,我的实际代码非常复杂并且会检查很多因素(MiddleName
、coloredName
、...)。因此,每次迭代时检查都会降低性能,因为它会检查许多因素并更改最终数据。在保持代码优化和良好的同时最好的方法是什么?
如果您对我要实现的目标感到困惑,请以这段代码为例:
# 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)