什么是正确的Pythonic方法来打破下面表达式的第一行(出现在多行上),以便它更具可读性:
if props.getProperty("app.auth.idp.strategy") == '' or props.getProperty("app.auth.idp.strategy") == 'saml/simpleSAMLphp' and PROXYING_MECHANISM == "ngrok":
IDP_STRATEGY = "saml/simpleSAMLphp"
elif props.getProperty("app.auth.idp.strategy") == 'saml/gsuite':
IDP_STRATEGY = "saml/gsuite"
elif props.getProperty("app.auth.idp.strategy") == 'saml/remote-simpleSAMLphp':
IDP_STRATEGY = "saml/remote-simpleSAMLphp"
else:
IDP_STRATEGY = "saml"
答案 0 :(得分:3)
我首先不要反复调用props.getProperty("app.auth.idp.strategy")
。叫它一次,你立即没有理由分割任何一行。
strategy = props.getProperty("app.auth.idp.strategy")
if not strategy or strategy == 'saml/simpleSAMLphp' and PROXYING_MECHANISM == "ngrok":
IDP_STRATEGY = "saml/simpleSAMLphp"
elif strategy == 'saml/gsuite':
IDP_STRATEGY = "saml/gsuite"
elif strategy == 'saml/remote-simpleSAMLphp':
IDP_STRATEGY = "saml/remote-simpleSAMLphp"
else:
IDP_STRATEGY = "saml"
对于第一个长行,您的选项是行继续,显式:
if not strategy or \
strategy == 'saml/simpleSAMLphp' and \
PROXYING_MECHANISM == "ngrok":
或隐含的,在括号内:
if (not strategy or
strategy == 'saml/simpleSAMLphp' and
PROXYING_MECHANISM == "ngrok"):
偶数更好的选项是用dict
查找替换长串比较:
strategies = {
"saml/gsuite": "saml/gsuite",
"saml/remote-simpleSAMLphp": "saml/remote-simpleSAMLphp",
}
if PROXYING_MECHANISM == "ngrok":
strategies['saml/simpleSAMLphp'] = 'saml/simpleSAMLphp'
IDP_STRATEGY = strategies.get(props.getProperty("app.auth.idp.strategy"), "saml")
由于dict
的每个键都只是映射到自身,因此您可以使用简单的set
查找替换 。
strategies = {
"saml/gsuite",
"saml/remote-simpleSAMLphp",
}
if PROXYING_MECHANISM == "ngrok":
strategies.add('saml/simpleSAMLphp')
IDP_STRATEGY = "saml"
strategy = props.getProperty("app.auth.idp.strategy")
if strategy in strategies:
IDP_STRATEGY = strategy
选择你认为最后两个中哪一个更具可读性。 dict
在定义中更加冗余,但允许对IDP_STRATEGY
进行单一分配。
答案 1 :(得分:1)
prop_var = props.getProperty("app.auth.idp.strategy")
if prop_var == '' or prop_var == 'saml/simpleSAMLphp' and PROXYING_MECHANISM == "ngrok":
IDP_STRATEGY = "saml/simpleSAMLphp"
elif prop_var == 'saml/gsuite':
IDP_STRATEGY = "saml/gsuite"
elif prop_var == 'saml/remote-simpleSAMLphp':
IDP_STRATEGY = "saml/remote-simpleSAMLphp"
else:
IDP_STRATEGY = "saml"
如评论中所述,您可以在每行末尾添加\
。您还可以使用变量替换每个getProperty("app.auth.idp.strategy")
,以便将其调用一次。
答案 2 :(得分:1)
根据PEP8
可能是这样的if props.getProperty("app.auth.idp.strategy") == '' \
or props.getProperty("app.auth.idp.strategy") == 'saml/simpleSAMLphp' \
and PROXYING_MECHANISM == "ngrok":
IDP_STRATEGY = "saml/simpleSAMLphp"
elif props.getProperty("app.auth.idp.strategy") == 'saml/gsuite':
IDP_STRATEGY = "saml/gsuite"
elif props.getProperty("app.auth.idp.strategy") == 'saml/remote-simpleSAMLphp':
IDP_STRATEGY = "saml/remote-simpleSAMLphp"
else:
IDP_STRATEGY = "saml"
答案 3 :(得分:0)
您可以使用' \'明确地将其分解。或者通过将条件放在括号内来打破它
if (a
==b
==c):