簡體   English   中英

Python 長語句的可讀性

[英]Python readibility of long statement

我調用了 function,它返回了很多元素,遵守 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)

我想要這樣的東西,我們可以清楚地看到調用 function 的地方。換句話說,我希望看到=符號前后的明顯區別。

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
)

這使得分配變量列表結束和 function 調用開始的位置變得非常明顯。

我建議如果只是調用這個 function 就這么復雜,你可能想重新考慮這個 API 並讓它返回某種類型的 object (可能只是像dataclassNamedTuple這樣簡單的東西)而不是一個需要所有的匿名元組這種解構是為了可用。 例如:

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的做法(你可以在它的操場上試試):

(
    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,
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM