Python 长语句的可读性
Python readibility of long statement
我调用了一个 returns 很多元素的函数,尊重 PEP8 的方法是执行以下操作,但我觉得它的可读性不强:
colonne_dernier_attribut, colonne_non_explained_beads, colonne_non_explained_beads_recipient, \
colonne_non_explained_beads_donor, colonne_score, colonne_comments, colonne_loci_manquants, \
colonne_edta, colonne_temps, colonne_summary = \
formatageRes(ws, wrsep, wdsep, feuille, feuille_corrigee, all_epitopes_considered, nbr_ep_considered, nrows)
我想要这样的东西,我们可以清楚地看到调用函数的地方。换句话说,我希望看到 =
符号前后的明显区别。
colonne_dernier_attribut, colonne_non_explained_beads, colonne_non_explained_beads_recipient, \
colonne_non_explained_beads_donor, colonne_score, colonne_comments, colonne_loci_manquants, \
colonne_edta, colonne_temps, colonne_summary = \
formatageRes(ws, wrsep, wdsep, feuille, feuille_corrigee, all_epitopes_considered, nbr_ep_considered, nrows)
但这不符合 PEP8 准则。我正在寻找第三种替代方案,它更具可读性并且遵循 PEP8。
一个方便的技巧是使用 parens 允许您跨行拆分作业而不必转义换行符:
(
colonne_dernier_attribut,
colonne_non_explained_beads,
colonne_non_explained_beads_recipient,
colonne_non_explained_beads_donor,
colonne_score,
colonne_comments,
colonne_loci_manquants,
colonne_edta,
colonne_temps,
colonne_summary
) = formatageRes(
ws,
wrsep,
wdsep,
feuille,
feuille_corrigee,
all_epitopes_considered,
nbr_ep_considered,
nrows
)
这使得分配变量列表结束和函数调用开始的位置变得非常明显。
我建议,如果只是调用这个函数就这么复杂,你可能想重新考虑这个 API 并让它 return 某种对象(也许只是像这样简单的东西dataclass
或 NamedTuple
) 而不是需要所有这些解构才能使用的匿名元组。例如:
from dataclasses import dataclass
@dataclass
class Collone:
dernier_attribut: str
non_explained_beads: int
non_explained_beads_recipient: str
non_explained_beads_donor: str
score: int
comments: list[str]
loci_manquants: tuple[int, int]
edta: str
temps: list[int]
summar: int
def formatageRes(
ws,
wrsep,
wdsep,
feuille,
feuille_corrigee,
all_epitopes_considered,
nbr_ep_considered,
nrows
) -> Collone: ...
这样你就可以做到:
collone = formatageRes(
ws,
wrsep,
wdsep,
feuille,
feuille_corrigee,
all_epitopes_considered,
nbr_ep_considered,
nrows
)
调用代码的其余部分基本相同,但 collone_varname
替换为 collone.varname
。
我喜欢Black does (you can try it on its playground):
(
colonne_dernier_attribut,
colonne_non_explained_beads,
colonne_non_explained_beads_recipient,
colonne_non_explained_beads_donor,
colonne_score,
colonne_comments,
colonne_loci_manquants,
colonne_edta,
colonne_temps,
colonne_summary,
) = formatageRes(
ws,
wrsep,
wdsep,
feuille,
feuille_corrigee,
all_epitopes_considered,
nbr_ep_considered,
nrows,
)
我调用了一个 returns 很多元素的函数,尊重 PEP8 的方法是执行以下操作,但我觉得它的可读性不强:
colonne_dernier_attribut, colonne_non_explained_beads, colonne_non_explained_beads_recipient, \
colonne_non_explained_beads_donor, colonne_score, colonne_comments, colonne_loci_manquants, \
colonne_edta, colonne_temps, colonne_summary = \
formatageRes(ws, wrsep, wdsep, feuille, feuille_corrigee, all_epitopes_considered, nbr_ep_considered, nrows)
我想要这样的东西,我们可以清楚地看到调用函数的地方。换句话说,我希望看到 =
符号前后的明显区别。
colonne_dernier_attribut, colonne_non_explained_beads, colonne_non_explained_beads_recipient, \
colonne_non_explained_beads_donor, colonne_score, colonne_comments, colonne_loci_manquants, \
colonne_edta, colonne_temps, colonne_summary = \
formatageRes(ws, wrsep, wdsep, feuille, feuille_corrigee, all_epitopes_considered, nbr_ep_considered, nrows)
但这不符合 PEP8 准则。我正在寻找第三种替代方案,它更具可读性并且遵循 PEP8。
一个方便的技巧是使用 parens 允许您跨行拆分作业而不必转义换行符:
(
colonne_dernier_attribut,
colonne_non_explained_beads,
colonne_non_explained_beads_recipient,
colonne_non_explained_beads_donor,
colonne_score,
colonne_comments,
colonne_loci_manquants,
colonne_edta,
colonne_temps,
colonne_summary
) = formatageRes(
ws,
wrsep,
wdsep,
feuille,
feuille_corrigee,
all_epitopes_considered,
nbr_ep_considered,
nrows
)
这使得分配变量列表结束和函数调用开始的位置变得非常明显。
我建议,如果只是调用这个函数就这么复杂,你可能想重新考虑这个 API 并让它 return 某种对象(也许只是像这样简单的东西dataclass
或 NamedTuple
) 而不是需要所有这些解构才能使用的匿名元组。例如:
from dataclasses import dataclass
@dataclass
class Collone:
dernier_attribut: str
non_explained_beads: int
non_explained_beads_recipient: str
non_explained_beads_donor: str
score: int
comments: list[str]
loci_manquants: tuple[int, int]
edta: str
temps: list[int]
summar: int
def formatageRes(
ws,
wrsep,
wdsep,
feuille,
feuille_corrigee,
all_epitopes_considered,
nbr_ep_considered,
nrows
) -> Collone: ...
这样你就可以做到:
collone = formatageRes(
ws,
wrsep,
wdsep,
feuille,
feuille_corrigee,
all_epitopes_considered,
nbr_ep_considered,
nrows
)
调用代码的其余部分基本相同,但 collone_varname
替换为 collone.varname
。
我喜欢Black does (you can try it on its playground):
(
colonne_dernier_attribut,
colonne_non_explained_beads,
colonne_non_explained_beads_recipient,
colonne_non_explained_beads_donor,
colonne_score,
colonne_comments,
colonne_loci_manquants,
colonne_edta,
colonne_temps,
colonne_summary,
) = formatageRes(
ws,
wrsep,
wdsep,
feuille,
feuille_corrigee,
all_epitopes_considered,
nbr_ep_considered,
nrows,
)