如何将一条语句拆分成多行?
How to split a statement into multiple lines?
什么是正确的 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"
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")
替换为一个变量,这样它就被调用一次。
根据 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"
您可以使用 '\' 明确地中断它,或者通过将条件放在括号内来中断它
if (a
==b
==c):
重构
我会从不重复调用 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
查找替换 that。
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
.
进行单个赋值
什么是正确的 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"
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")
替换为一个变量,这样它就被调用一次。
根据 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"
您可以使用 '\' 明确地中断它,或者通过将条件放在括号内来中断它
if (a
==b
==c):
重构
我会从不重复调用 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
查找替换 that。
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
.