Python:long if表达式vrs。小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块:

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有一个稍微的优势,即更方便进行覆盖率测试。优雅且易于扩展,非常棒!