Python:很长,如果表达vrs.如果块很小

Edu*_*vas 0 python expression pep8 conditional-statements

我有这个非常简单的if块:

if obj_type == "domain":
    key = "domain"
elif obj_type == "db_user":
    key = "username"
else:
    key = "name"
Run Code Online (Sandbox Code Playgroud)

这些可以转换为if表达式:
key = "domain" if obj_type == "domain" else "usernme" if obj_type == "db_user" else "name"

性能有任何优势吗?如果这不是一个因素,哪个应该是首选的可读性,PEP8合规性?

Ble*_*der 6

它们的表现相同,因此如果您需要在两者之间进行选择,请使用第一个.

由于您实际上只是在两个集合之间创建映射,因此使用字典将是更好的方法.它更快,可以说更具可读性:

mapping = {
    'domain': 'domain',
    'db_user': 'username',
}

key = mapping.get(obj_type, 'name')
Run Code Online (Sandbox Code Playgroud)