Python:long if表达式vrs。小if块
我有一个非常小且简单的if块:Python:long if表达式vrs。小if块,python,expression,conditional-statements,pep8,Python,Expression,Conditional Statements,Pep8,我有一个非常小且简单的if块: if obj_type == "domain": key = "domain" elif obj_type == "db_user": key = "username" else: key = "name" 这些可以转换为if表达式: key=“domain”如果对象类型==“domain”否则“usernme”如果对象类型==“db\u user”否则“name” 在性能上有什么优势吗?如果这不是一个因素,那么为了可读性、PEP8合规性
if obj_type == "domain":
key = "domain"
elif obj_type == "db_user":
key = "username"
else:
key = "name"
这些可以转换为if表达式:key=“domain”如果对象类型==“domain”否则“usernme”如果对象类型==“db\u user”否则“name”
在性能上有什么优势吗?如果这不是一个因素,那么为了可读性、PEP8合规性,您应该选择哪一个?它们的性能相同,因此如果需要在两者之间进行选择,请使用第一个 因为您实际上只是在两个集合之间创建映射,所以使用字典将是更好的方法。它速度更快,可读性更强:
mapping = {
'domain': 'domain',
'db_user': 'username',
}
key = mapping.get(obj_type, 'name')
它们的性能相同,因此如果需要在两者之间进行选择,请使用第一个 因为您实际上只是在两个集合之间创建映射,所以使用字典将是更好的方法。它速度更快,可读性更强:
mapping = {
'domain': 'domain',
'db_user': 'username',
}
key = mapping.get(obj_type, 'name')
如果。。。elseblock有一个稍微的优势,即更方便进行覆盖率测试。优雅且易于扩展,非常棒!如果。。。elseblock有一个稍微的优势,即更方便进行覆盖率测试。优雅且易于扩展,非常棒!